diff --git a/demo/apps/bookinfo/BUILD b/demo/apps/bookinfo/BUILD
deleted file mode 100644
index 5ce7a3b..0000000
--- a/demo/apps/bookinfo/BUILD
+++ /dev/null
@@ -1,16 +0,0 @@
-filegroup(
-    name = "bookinfo",
-    srcs = [
-        "bookinfo.yaml",
-        "mixer-rule-additional-telemetry.yaml",
-        "mixer-rule-empty-rule.yaml",
-        "mixer-rule-ratings-denial.yaml",
-        "mixer-rule-ratings-ratelimit.yaml",
-        "route-rule-all-v1.yaml",
-        "route-rule-delay.yaml",
-        "route-rule-reviews-50-v3.yaml",
-        "route-rule-reviews-test-v2.yaml",
-        "route-rule-reviews-v2-v3.yaml",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/demo/apps/bookinfo/README.md b/demo/apps/bookinfo/README.md
deleted file mode 100644
index 3c72e26..0000000
--- a/demo/apps/bookinfo/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-See the [Bookinfo demo](https://istio.io/docs/samples/bookinfo.html) in Istio
-docs for instructions on how to run this demo application.
diff --git a/demo/apps/bookinfo/bookinfo.yaml b/demo/apps/bookinfo/bookinfo.yaml
deleted file mode 100644
index dec1645..0000000
--- a/demo/apps/bookinfo/bookinfo.yaml
+++ /dev/null
@@ -1,222 +0,0 @@
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-##################################################################################################
-# Details service
-##################################################################################################
-apiVersion: v1
-kind: Service
-metadata:
-  name: details
-  labels:
-    app: details
-spec:
-  ports:
-  - port: 9080
-    name: http
-  selector:
-    app: details
----
-apiVersion: extensions/v1beta1
-kind: Deployment
-metadata:
-  name: details-v1
-spec:
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: details
-        version: v1
-    spec:
-      containers:
-      - name: details
-        image: istio/examples-bookinfo-details-v1
-        imagePullPolicy: IfNotPresent
-        ports:
-        - containerPort: 9080
----
-##################################################################################################
-# Ratings service
-##################################################################################################
-apiVersion: v1
-kind: Service
-metadata:
-  name: ratings
-  labels:
-    app: ratings
-spec:
-  ports:
-  - port: 9080
-    name: http
-  selector:
-    app: ratings
----
-apiVersion: extensions/v1beta1
-kind: Deployment
-metadata:
-  name: ratings-v1
-spec:
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: ratings
-        version: v1
-    spec:
-      containers:
-      - name: ratings
-        image: istio/examples-bookinfo-ratings-v1
-        imagePullPolicy: IfNotPresent
-        ports:
-        - containerPort: 9080
----
-##################################################################################################
-# Reviews service
-##################################################################################################
-apiVersion: v1
-kind: Service
-metadata:
-  name: reviews
-  labels:
-    app: reviews
-spec:
-  ports:
-  - port: 9080
-    name: http
-  selector:
-    app: reviews
----
-apiVersion: extensions/v1beta1
-kind: Deployment
-metadata:
-  name: reviews-v1
-spec:
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: reviews
-        version: v1
-    spec:
-      containers:
-      - name: reviews
-        image: istio/examples-bookinfo-reviews-v1
-        imagePullPolicy: IfNotPresent
-        ports:
-        - containerPort: 9080
----
-apiVersion: extensions/v1beta1
-kind: Deployment
-metadata:
-  name: reviews-v2
-spec:
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: reviews
-        version: v2
-    spec:
-      containers:
-      - name: reviews
-        image: istio/examples-bookinfo-reviews-v2
-        imagePullPolicy: IfNotPresent
-        ports:
-        - containerPort: 9080
----
-apiVersion: extensions/v1beta1
-kind: Deployment
-metadata:
-  name: reviews-v3
-spec:
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: reviews
-        version: v3
-    spec:
-      containers:
-      - name: reviews
-        image: istio/examples-bookinfo-reviews-v3
-        imagePullPolicy: IfNotPresent
-        ports:
-        - containerPort: 9080
----
-##################################################################################################
-# Productpage service
-##################################################################################################
-apiVersion: v1
-kind: Service
-metadata:
-  name: productpage
-  labels:
-    app: productpage
-spec:
-  ports:
-  - port: 9080
-    name: http
-  selector:
-    app: productpage
----
-apiVersion: extensions/v1beta1
-kind: Deployment
-metadata:
-  name: productpage-v1
-spec:
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: productpage
-        version: v1
-    spec:
-      containers:
-      - name: productpage
-        image: istio/examples-bookinfo-productpage-v1
-        imagePullPolicy: IfNotPresent
-        ports:
-        - containerPort: 9080
----
-###########################################################################
-# Ingress resource (gateway)
-##########################################################################
-apiVersion: extensions/v1beta1
-kind: Ingress
-metadata:
-  name: gateway
-  annotations:
-    kubernetes.io/ingress.class: "istio"
-spec:
-  rules:
-  - http:
-      paths:
-      - path: /productpage
-        backend:
-          serviceName: productpage
-          servicePort: 9080
-      - path: /login
-        backend:
-          serviceName: productpage
-          servicePort: 9080
-      - path: /logout
-        backend:
-          serviceName: productpage
-          servicePort: 9080
-      - path: /ratings
-        backend:
-          serviceName: ratings
-          servicePort: 9080
----
diff --git a/demo/apps/bookinfo/cleanup.sh b/demo/apps/bookinfo/cleanup.sh
deleted file mode 100755
index 533db2d..0000000
--- a/demo/apps/bookinfo/cleanup.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-
-istioctl delete route-rule productpage-default
-istioctl delete route-rule reviews-default
-istioctl delete route-rule ratings-default
-istioctl delete route-rule details-default
-istioctl delete route-rule reviews-test-v2
-istioctl delete route-rule ratings-test-delay
-#istioctl delete mixer-rule ratings-ratelimit
-
-kubectl delete -f $SCRIPTDIR/bookinfo.yaml
diff --git a/demo/apps/bookinfo/destination-ratings-test-delay.yaml b/demo/apps/bookinfo/destination-ratings-test-delay.yaml
deleted file mode 100644
index 2d39120..0000000
--- a/demo/apps/bookinfo/destination-ratings-test-delay.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-type: route-rule
-name: ratings-test-delay
-spec:
-  destination: ratings.default.svc.cluster.local
-  precedence: 2
-  match:
-    httpHeaders:
-      cookie:
-        regex: "^(.*?;)?(user=jason)(;.*)?$"
-  route:
-  - tags:
-      version: v1
-  httpFault:
-    delay:
-      percent: 100
-      fixedDelay: 7s
diff --git a/demo/apps/bookinfo/mixer-rule-additional-telemetry.yaml b/demo/apps/bookinfo/mixer-rule-additional-telemetry.yaml
deleted file mode 100644
index 17be581..0000000
--- a/demo/apps/bookinfo/mixer-rule-additional-telemetry.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
-revision: "1"
-rules:
-- aspects:
-  - adapter: prometheus
-    kind: metrics
-    params:
-      metrics:
-      - descriptor_name: response_size
-        value: response.size | 0
-        labels:
-          source: source.service | "unknown"
-          target: target.service | "unknown"
-          service: target.labels["app"] | "unknown"
-          method: request.path | "unknown"
-          response_code: response.code | 200
-  - kind: access-logs
-    params:
-      logName: combined_log
-      log:
-        descriptor_name: accesslog.combined
-        template_expressions:
-          originIp: origin.ip
-          sourceUser: origin.user
-          timestamp: request.time
-          method: request.method
-          url: request.path
-          protocol: request.scheme
-          responseCode: response.code
-          responseSize: response.size
-          referer: request.referer
-          userAgent: request.headers["user-agent"]
-        labels:
-          originIp: origin.ip
-          sourceUser: origin.user
-          timestamp: request.time
-          method: request.method
-          url: request.path
-          protocol: request.scheme
-          responseCode: response.code
-          responseSize: response.size
-          referer: request.referer
-          userAgent: request.headers["user-agent"]
diff --git a/demo/apps/bookinfo/mixer-rule-empty-rule.yaml b/demo/apps/bookinfo/mixer-rule-empty-rule.yaml
deleted file mode 100644
index 59b07e9..0000000
--- a/demo/apps/bookinfo/mixer-rule-empty-rule.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-revision: "2"
-rules:
diff --git a/demo/apps/bookinfo/mixer-rule-ratings-denial.yaml b/demo/apps/bookinfo/mixer-rule-ratings-denial.yaml
deleted file mode 100644
index d6e5ba7..0000000
--- a/demo/apps/bookinfo/mixer-rule-ratings-denial.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-rules:
-  - selector: source.labels["app"]=="reviews" && source.labels["version"] == "v3"
-    aspects:
-    - kind: denials
diff --git a/demo/apps/bookinfo/mixer-rule-ratings-ratelimit.yaml b/demo/apps/bookinfo/mixer-rule-ratings-ratelimit.yaml
deleted file mode 100644
index 4284de0..0000000
--- a/demo/apps/bookinfo/mixer-rule-ratings-ratelimit.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-rules:
-- aspects:
-  - kind: quotas
-    params:
-      quotas:
-      - descriptorName: RequestCount
-        maxAmount: 5
-        expiration: 1s
diff --git a/demo/apps/bookinfo/route-rule-all-v1.yaml b/demo/apps/bookinfo/route-rule-all-v1.yaml
deleted file mode 100644
index b136ee9..0000000
--- a/demo/apps/bookinfo/route-rule-all-v1.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-type: route-rule
-name: productpage-default
-spec:
-  destination: productpage.default.svc.cluster.local
-  precedence: 1
-  route:
-  - tags:
-      version: v1
----
-type: route-rule
-name: reviews-default
-spec:
-  destination: reviews.default.svc.cluster.local
-  precedence: 1
-  route:
-  - tags:
-      version: v1
----
-type: route-rule
-name: ratings-default
-spec:
-  destination: ratings.default.svc.cluster.local
-  precedence: 1
-  route:
-  - tags:
-      version: v1
----
-type: route-rule
-name: details-default
-spec:
-  destination: details.default.svc.cluster.local
-  precedence: 1
-  route:
-  - tags:
-      version: v1
diff --git a/demo/apps/bookinfo/route-rule-delay.yaml b/demo/apps/bookinfo/route-rule-delay.yaml
deleted file mode 100644
index 2bfecb2..0000000
--- a/demo/apps/bookinfo/route-rule-delay.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-type: route-rule
-name: ratings-test-delay
-spec:
-  destination: ratings.default.svc.cluster.local
-  precedence: 2
-  match:
-    httpHeaders:
-      cookie:
-        regex: "^(.*?;)?(user=test-user)(;.*)?$"
-  route:
-  - tags:
-      version: v1
-  httpFault:
-    delay:
-      percent: 100
-      fixedDelay: 7s
diff --git a/demo/apps/bookinfo/route-rule-reviews-50-v3.yaml b/demo/apps/bookinfo/route-rule-reviews-50-v3.yaml
deleted file mode 100644
index a517ec2..0000000
--- a/demo/apps/bookinfo/route-rule-reviews-50-v3.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-type: route-rule
-name: reviews-default
-spec:
-  destination: reviews.default.svc.cluster.local
-  precedence: 1
-  route:
-  - tags:
-      version: v1
-    weight: 50
-  - tags:
-      version: v3
-    weight: 50
diff --git a/demo/apps/bookinfo/route-rule-reviews-test-v2.yaml b/demo/apps/bookinfo/route-rule-reviews-test-v2.yaml
deleted file mode 100644
index 775cc83..0000000
--- a/demo/apps/bookinfo/route-rule-reviews-test-v2.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-type: route-rule
-name: reviews-test-v2
-spec:
-  destination: reviews.default.svc.cluster.local
-  precedence: 2
-  match:
-    httpHeaders:
-      cookie:
-        regex: "^(.*?;)?(user=jason)(;.*)?$"
-  route:
-  - tags:
-      version: v2
diff --git a/demo/apps/bookinfo/route-rule-reviews-v2-v3.yaml b/demo/apps/bookinfo/route-rule-reviews-v2-v3.yaml
deleted file mode 100644
index 4be24e0..0000000
--- a/demo/apps/bookinfo/route-rule-reviews-v2-v3.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-type: route-rule
-name: reviews-default
-spec:
-  destination: reviews.default.svc.cluster.local
-  precedence: 1
-  route:
-  - tags:
-      version: v2
-    weight: 50
-  - tags:
-      version: v3
-    weight: 50
diff --git a/demo/apps/bookinfo/route-rule-reviews-v3.yaml b/demo/apps/bookinfo/route-rule-reviews-v3.yaml
deleted file mode 100644
index d238270..0000000
--- a/demo/apps/bookinfo/route-rule-reviews-v3.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-type: route-rule
-name: reviews-default
-spec:
-  destination: reviews.default.svc.cluster.local
-  precedence: 1
-  route:
-  - tags:
-      version: v3
-    weight: 100
diff --git a/demo/apps/bookinfo/src/build-services.sh b/demo/apps/bookinfo/src/build-services.sh
deleted file mode 100755
index 9dcb95f..0000000
--- a/demo/apps/bookinfo/src/build-services.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-set -o errexit
-
-SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-
-pushd $SCRIPTDIR/productpage
-  docker build -t istio/examples-bookinfo-productpage-v1 .
-popd
-
-pushd $SCRIPTDIR/details
-  docker build -t istio/examples-bookinfo-details-v1 .
-popd
-
-pushd $SCRIPTDIR/reviews
-  #java build the app.
-  docker run --rm -v `pwd`:/usr/bin/app:rw niaquinto/gradle clean build
-  pushd reviews-wlpcfg
-    #plain build -- no ratings
-    docker build -t istio/examples-bookinfo-reviews-v1 --build-arg service_version=v1 .
-    #with ratings black stars
-    docker build -t istio/examples-bookinfo-reviews-v2 --build-arg service_version=v2 --build-arg enable_ratings=true .
-    #with ratings red stars
-    docker build -t istio/examples-bookinfo-reviews-v3 --build-arg service_version=v3 --build-arg enable_ratings=true --build-arg star_color=red .
-  popd
-popd
-
-pushd $SCRIPTDIR/ratings
-  docker build -t istio/examples-bookinfo-ratings-v1 .
-popd
diff --git a/demo/apps/bookinfo/src/details/Dockerfile b/demo/apps/bookinfo/src/details/Dockerfile
deleted file mode 100644
index b721e3e..0000000
--- a/demo/apps/bookinfo/src/details/Dockerfile
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-FROM ruby:2.3
-
-RUN mkdir -p /opt/microservices
-COPY . /opt/microservices/
-EXPOSE 9080
-WORKDIR /opt/microservices
-
-CMD ruby details.rb 9080
diff --git a/demo/apps/bookinfo/src/details/details.rb b/demo/apps/bookinfo/src/details/details.rb
deleted file mode 100755
index a7ba941..0000000
--- a/demo/apps/bookinfo/src/details/details.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/ruby
-#
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-require 'webrick'
-
-if ARGV.length < 1 then
-    puts "usage: #{$PROGRAM_NAME} port"
-    exit(-1)
-end
-
-port = Integer(ARGV[0])
-
-server = WEBrick::HTTPServer.new :BindAddress => '0.0.0.0', :Port => port
-
-trap 'INT' do server.shutdown end
-
-details_resp = '
-<h4 class="text-center text-primary">Book Details</h4>
-<dl>
-<dt>Paperback:</dt>200 pages
-<dt>Publisher:</dt> PublisherA
-<dt>Language:</dt>English
-<dt>ISBN-10:</dt>1234567890
-<dt>ISBN-13:</dt>123-1234567980
-</dl>
-'
-
-server.mount_proc '/health' do |req, res|
-    res.status = 200
-    res.body = 'Details is healthy'
-    res['Content-Type'] = 'text/html'
-end
-
-server.mount_proc '/details' do |req, res|
-    res.body = details_resp
-    res['Content-Type'] = 'text/html'
-end
-
-server.mount_proc '/' do |req, res|
-  res.body = '
-    <html>
-    <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    <!-- Latest compiled and minified CSS -->
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
-
-    <!-- Optional theme -->
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
-
-    <!-- Latest compiled and minified JavaScript -->
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
-
-    <!-- Latest compiled and minified JavaScript -->
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
-
-    </head>
-    <title>Book details service</title>
-    <body>
-    <p><h2>Hello! This is the book details service. My content is</h2></p>
-    <div>%s</div>
-    </body>
-    </html>
-  ' % [details_resp]
-  res['Content-Type'] = 'text/html'
-end
-
-server.start
diff --git a/demo/apps/bookinfo/src/productpage/Dockerfile b/demo/apps/bookinfo/src/productpage/Dockerfile
deleted file mode 100644
index bf52623..0000000
--- a/demo/apps/bookinfo/src/productpage/Dockerfile
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-FROM python:2-onbuild
-
-RUN mkdir -p /opt/microservices
-COPY . /opt/microservices/
-EXPOSE 9080
-WORKDIR /opt/microservices
-CMD python productpage.py 9080
diff --git a/demo/apps/bookinfo/src/productpage/productpage.py b/demo/apps/bookinfo/src/productpage/productpage.py
deleted file mode 100644
index 52cde6b..0000000
--- a/demo/apps/bookinfo/src/productpage/productpage.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-
-from flask import Flask, request, render_template, redirect, url_for
-import simplejson as json
-import requests
-import sys
-from json2html import *
-import logging
-import requests
-
-# These two lines enable debugging at httplib level (requests->urllib3->http.client)
-# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
-# The only thing missing will be the response.body which is not logged.
-try:
-    import http.client as http_client
-except ImportError:
-    # Python 2
-    import httplib as http_client
-http_client.HTTPConnection.debuglevel = 1
-
-app = Flask(__name__)
-logging.basicConfig(filename='microservice.log',filemode='w',level=logging.DEBUG)
-requests_log = logging.getLogger("requests.packages.urllib3")
-requests_log.setLevel(logging.DEBUG)
-requests_log.propagate = True
-app.logger.addHandler(logging.StreamHandler(sys.stdout))
-app.logger.setLevel(logging.DEBUG)
-
-from flask_bootstrap import Bootstrap
-Bootstrap(app)
-
-details = {
-    "name" : "http://details:9080",
-    "endpoint" : "details",
-    "children" : []
-}
-
-ratings = {
-    "name" : "http://ratings:9080",
-    "endpoint" : "ratings",
-    "children" : []
-}
-
-reviews = {
-    "name" : "http://reviews:9080",
-    "endpoint" : "reviews",
-    "children" : [ratings]
-}
-
-productpage = {
-    "name" : "http://productpage:9080",
-    "endpoint" : "details",
-    "children" : [details, reviews]
-}
-
-service_dict = {
-    "productpage" : productpage,
-    "details" : details,
-    "reviews" : reviews,
-}
-
-def getForwardHeaders(request):
-    headers = {}
-
-    user_cookie = request.cookies.get("user")
-    if user_cookie:
-        headers['Cookie'] = 'user=' + user_cookie
-
-    incoming_headers = [ 'x-request-id',
-                         'x-b3-traceid',
-                         'x-b3-spanid',
-                         'x-b3-parentspanid',
-                         'x-b3-sampled',
-                         'x-b3-flags',
-                         'x-ot-span-context'
-    ]
-
-    for ihdr in incoming_headers:
-        val = request.headers.get(ihdr)
-        if val is not None:
-            headers[ihdr] = val
-            #print "incoming: "+ihdr+":"+val
-
-    return headers
-
-@app.route('/')
-@app.route('/index.html')
-def index():
-    """ Display productpage with normal user and test user buttons"""
-    global productpage
-
-    table = json2html.convert(json = json.dumps(productpage),
-                              table_attributes="class=\"table table-condensed table-bordered table-hover\"")
-
-    return render_template('index.html', serviceTable=table)
-
-@app.route('/health')
-def health():
-    return 'Product page is healthy'
-
-@app.route('/login', methods=['POST'])
-def login():
-    user = request.values.get('username')
-    response = app.make_response(redirect(request.referrer))
-    response.set_cookie('user', user)
-    return response
-
-@app.route('/logout', methods=['GET'])
-def logout():
-    response = app.make_response(redirect(request.referrer))
-    response.set_cookie('user', '', expires=0)
-    return response
-
-@app.route('/productpage')
-def front():
-    headers = getForwardHeaders(request)
-    user = request.cookies.get("user", "")
-    bookdetails = getDetails(headers)
-    bookreviews = getReviews(headers)
-    return render_template('productpage.html', details=bookdetails, reviews=bookreviews, user=user)
-
-def getReviews(headers):
-    for i in range(2):
-        try:
-            res = requests.get(reviews['name']+"/"+reviews['endpoint'], headers=headers, timeout=3.0)
-        except:
-            res = None
-
-        if res and res.status_code == 200:
-            return res.text
-
-    return """<h3>Sorry, product reviews are currently unavailable for this book.</h3>"""
-
-
-def getDetails(headers):
-    try:
-        res = requests.get(details['name']+"/"+details['endpoint'], headers=headers, timeout=1.0)
-    except:
-        res = None
-
-    if res and res.status_code == 200:
-        return res.text
-    else:
-        return """<h3>Sorry, product details are currently unavailable for this book.</h3>"""
-
-
-class Writer(object):
-
-    def __init__(self, filename):
-        self.file = open(filename,'w')
-
-    def write(self, data):
-        self.file.write(data)
-        self.file.flush()
-
-
-if __name__ == '__main__':
-    if len(sys.argv) < 2:
-        print "usage: %s port" % (sys.argv[0])
-        sys.exit(-1)
-
-    p = int(sys.argv[1])
-    sys.stderr = Writer('stderr.log')
-    sys.stdout = Writer('stdout.log')
-    app.run(host='0.0.0.0', port=p, debug = True, threaded=True)
-
diff --git a/demo/apps/bookinfo/src/productpage/requirements.txt b/demo/apps/bookinfo/src/productpage/requirements.txt
deleted file mode 100644
index 619c343..0000000
--- a/demo/apps/bookinfo/src/productpage/requirements.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-requests
-flask
-flask_json
-flask_bootstrap
-json2html
-simplejson
-gevent
-
diff --git a/demo/apps/bookinfo/src/productpage/templates/index.html b/demo/apps/bookinfo/src/productpage/templates/index.html
deleted file mode 100644
index 6f7d6d2..0000000
--- a/demo/apps/bookinfo/src/productpage/templates/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% extends "bootstrap/base.html" %}
-{% block metas %}
-<meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1">
-{% endblock %}
-
-{% block styles %}
-<!-- Latest compiled and minified CSS -->
-<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
-
-<!-- Optional theme -->
-<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
-{% endblock %}
-{% block scripts %}
-<!-- Latest compiled and minified JavaScript -->
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
-
-<!-- Latest compiled and minified JavaScript -->
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
-{% endblock %}
-{% block title %}Simple Bookstore App{% endblock %}
-{% block content %}
-    <p><h3>Hello! This is a simple bookstore application consisting of three services as shown below</h3></p>
-    {% autoescape false %}
-    {{ serviceTable }}
-    {% endautoescape %}
-    <p><h4>Click on one of the links below to auto generate a request to the backend as a real user or a tester
-    </h4></p>
-    <p><a href="/productpage?u=normal">Normal user</a></p>
-    <p><a href="/productpage?u=test">Test user</a></p>
-{% endblock %}
diff --git a/demo/apps/bookinfo/src/productpage/templates/productpage.html b/demo/apps/bookinfo/src/productpage/templates/productpage.html
deleted file mode 100644
index 382726a..0000000
--- a/demo/apps/bookinfo/src/productpage/templates/productpage.html
+++ /dev/null
@@ -1,120 +0,0 @@
-{% extends "bootstrap/base.html" %}
-{% block metas %}
-<meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-{% endblock %}
-
-{% block styles %}
-<!-- Latest compiled and minified CSS -->
-<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
-
-<!-- Optional theme -->
-<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
-{% endblock %}
-{% block scripts %}
-<!-- Latest compiled and minified JavaScript -->
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
-
-<!-- Latest compiled and minified JavaScript -->
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
-
-<script type="text/javascript">
-$('#login-modal').on('shown.bs.modal', function () {
-     $('#username').focus();
-});
-</script>
-{% endblock %}
-{% block title %}Simple Bookstore App{% endblock %}
-{% block content %}
-
-<nav class="navbar navbar-inverse navbar-static-top">
-    <div class="container">
-        <div class="navbar-header">
-            <a class="navbar-brand" href="#">BookInfo Sample</a>
-        </div>
-        {% if user: %}
-        <p class="navbar-text navbar-right">
-            <i class="glyphicon glyphicon-user" aria-hidden="true"></i>
-            <span style="padding-left: 5px;">{{ user }}  ( <a href="logout">sign out</a> )</span>
-        </p>
-        {% else %}
-        <button type="button" class="btn btn-default navbar-btn navbar-right" data-toggle="modal" href="#login-modal">Sign in</button>
-        {% endif %}
-    </div>
-</nav>
-
-<!---
-<div class="navbar navbar-inverse navbar-fixed-top">
-  <div class="container">
-    <div class="navbar-header pull-left">
-      <a class="navbar-brand" href="#">Microservices Fabric BookInfo Demo</a>
-    </div>
-    <div class="navbar-header pull-right">
-      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
-        <span class="icon-bar"></span>
-        <span class="icon-bar"></span>
-        <span class="icon-bar"></span>
-      </button>
-    </div>
-    <div class="navbar-collapse collapse">
-{% if user %}
-      <a href="logout"><button type="button" class="btn btn-default navbar-btn pull-right">Sign out</button></a>
-      <p class="navbar-text pull-right">Signed in as {{ user }}</p>
-{% else %}
-      <button type="button" class="btn btn-default navbar-btn pull-right" data-toggle="modal" data-target="#login-modal">Sign in</button>
-{% endif %}
-    </div>
-  </div>
-</div>
--->
-    
-<div id="login-modal" class="modal fade" role="dialog">
-  <div class="modal-dialog">
-    <div class="modal-content">
-      <div class="modal-header">
-        <button type="button" class="close" data-dismiss="modal">&times;</button>
-        <h4 class="modal-title">Please sign in</h4>
-      </div>
-      <div class="modal-body">
-        <form method="post" action='login' name="login_form">
-          <p><input type="text" class="form-control" name="username" id="username" placeholder="User Name"></p>
-          <p><input type="password" class="form-control" name="passwd" placeholder="Password"></p>
-          <p>
-             <button type="submit" class="btn btn-primary">Sign in</button>
-             <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-          </p>
-        </form>
-      </div>
-    </div>
-
-  </div>
-</div>
-
-<div class="container-fluid">
-<div class="row">
-<div class="col-md-12">
-    <h3 class="text-center text-primary">The Comedy of Errors</h3>
-    <p> <a href="https://en.wikipedia.org/wiki/The_Comedy_of_Errors">Wikipedia
-    Summary</a>: The Comedy of Errors is one of <b>William
-    Shakespeare's</b> early plays. It is his shortest and one of his
-    most farcical comedies, with a major part of the humour coming
-    from slapstick and mistaken identity, in addition to puns and word
-    play.</p>
-</div>
-</div>
-
-<div class="row">
-<div class="col-md-6">
-{% autoescape false %}
-{{ details }}
-{% endautoescape %}
-</div>
-<div class="col-md-6">
-{% autoescape false %}
-{{ reviews }}
-{% endautoescape %}
-</div>
-</div>
-</div>
-{% endblock %}
diff --git a/demo/apps/bookinfo/src/ratings/Dockerfile b/demo/apps/bookinfo/src/ratings/Dockerfile
deleted file mode 100644
index 45030d7..0000000
--- a/demo/apps/bookinfo/src/ratings/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2017 Istio Authors
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-FROM node:4-onbuild
-
-EXPOSE 9080
-CMD node ratings.js 9080
diff --git a/demo/apps/bookinfo/src/ratings/package.json b/demo/apps/bookinfo/src/ratings/package.json
deleted file mode 100644
index 40c0984..0000000
--- a/demo/apps/bookinfo/src/ratings/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "scripts": {
-    "start": "node ratings.js"
-  },
-  "dependencies": {
-    "httpdispatcher": "1.0.0"
-  }
-}
\ No newline at end of file
diff --git a/demo/apps/bookinfo/src/ratings/ratings.js b/demo/apps/bookinfo/src/ratings/ratings.js
deleted file mode 100644
index 2d0cb98..0000000
--- a/demo/apps/bookinfo/src/ratings/ratings.js
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2017 Istio Authors
-//
-//   Licensed under the Apache License, Version 2.0 (the "License");
-//   you may not use this file except in compliance with the License.
-//   You may obtain a copy of the License at
-//
-//       http://www.apache.org/licenses/LICENSE-2.0
-//
-//   Unless required by applicable law or agreed to in writing, software
-//   distributed under the License is distributed on an "AS IS" BASIS,
-//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//   See the License for the specific language governing permissions and
-//   limitations under the License.
-
-var http = require('http');
-var dispatcher = require('httpdispatcher');
-
-port = parseInt(process.argv[2]);
-
-var ratingsResponse = {"Reviewer1": 5, "Reviewer2": 4}
-
-dispatcher.onGet("/", function(req, res) {
-    res.writeHead(200)
-    res.end(
-        '<html>' +
-        '<head>' +
-        '<meta charset="utf-8">' +
-        '<meta http-equiv="X-UA-Compatible" content="IE=edge">' +
-        '<meta name="viewport" content="width=device-width, initial-scale=1">' +
-        '<!-- Latest compiled and minified CSS -->' +
-        '<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">' +
-        '<!-- Optional theme -->' +
-        '<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">' +
-        '<!-- Latest compiled and minified JavaScript -->' +
-        '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>' +
-        '<!-- Latest compiled and minified JavaScript -->' +
-        '<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>' +
-        '</head>' +
-        '<title>Book ratings service</title>' +
-        '<body>' +
-        '<p><h2>Hello! This is the book ratings service. My content is</h2></p>' +
-        '<div>' + JSON.stringify(ratingsResponse) + '</div>' +
-        '</body>' +
-        '</html>',
-        {"Content-type": "text/html"})
-})
-
-dispatcher.onGet("/ratings", function(req, res) {
-    var json = JSON.stringify(ratingsResponse)
-    res.writeHead(200, {"Content-type": "application/json"})
-    res.end(json)
-})
-
-dispatcher.onGet("/health", function(req, res) {
-    res.writeHead(200, {"Content-type": "text/plain"})
-    res.end("Ratings is healthy")
-})
-
-function handleRequest(request, response){
-    try {
-        console.log(request.method + " " + request.url);
-        dispatcher.dispatch(request, response);
-    } catch(err) {
-        console.log(err);
-    }
-}
-
-var server = http.createServer(handleRequest);
-
-server.listen(port, function(){
-    console.log("Server listening on: http://0.0.0.0:%s", port);
-});
diff --git a/demo/apps/bookinfo/src/reviews/build.gradle b/demo/apps/bookinfo/src/reviews/build.gradle
deleted file mode 100644
index 75bf360..0000000
--- a/demo/apps/bookinfo/src/reviews/build.gradle
+++ /dev/null
@@ -1,7 +0,0 @@
-allprojects {
-   group = 'org.istio'
-   version = '1.0'
-   repositories {
-     mavenCentral()
-   }
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-application/build.gradle b/demo/apps/bookinfo/src/reviews/reviews-application/build.gradle
deleted file mode 100644
index bf0f375..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-application/build.gradle
+++ /dev/null
@@ -1,19 +0,0 @@
-apply plugin: 'war'
-
-sourceCompatibility = 1.8
-
-repositories {
-  mavenCentral()
-}
-
-dependencies {
-    providedCompile group:'javax.websocket', name:'javax.websocket-api', version:'1.1'
-    providedCompile group:'javax.ws.rs', name:'javax.ws.rs-api', version:'2.0'
-    providedCompile group:'javax.json', name:'javax.json-api', version:'1.0'
-    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
-    providedCompile 'javax.annotation:javax.annotation-api:1.2'
-    providedCompile 'javax.inject:javax.inject:1'
-    providedCompile 'javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0'
-    providedCompile 'javax.enterprise:cdi-api:1.2'
-    providedCompile 'io.swagger:swagger-annotations:1.5.0'
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/java/application/ReviewsApplication.java b/demo/apps/bookinfo/src/reviews/reviews-application/src/main/java/application/ReviewsApplication.java
deleted file mode 100644
index 9f62285..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/java/application/ReviewsApplication.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package application;
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
-
-@ApplicationPath("/")
-public class ReviewsApplication extends Application {
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.java b/demo/apps/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.java
deleted file mode 100644
index 7379c4b..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 Istio Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *******************************************************************************/
-package application.rest;
-
-import java.io.StringReader;
-import javax.json.Json;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonReader;
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.Path;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.Invocation;
-import javax.ws.rs.client.Invocation.Builder;
-import javax.ws.rs.client.ResponseProcessingException;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.Cookie;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-@Path("/")
-public class LibertyRestEndpoint extends Application {
-
-    private final static Boolean ratings_enabled = Boolean.valueOf(System.getenv("ENABLE_RATINGS"));
-    private final static String star_color = System.getenv("STAR_COLOR") == null ? "black" : System.getenv("STAR_COLOR");
-    private final static String ratings_service = "http://ratings:9080/ratings";
-
-    private final static String review_resp = ""+
-      "<blockquote>"+
-      "<p>"+
-      "An extremely entertaining play by Shakespeare. The slapstick humour is refreshing!"+
-      "</p> <small>Reviewer1 <cite>Affiliation1</cite></small>"+
-      "%s"+
-      "</blockquote>"+
-      "<blockquote>"+
-      "<p>"+
-      "Absolutely fun and entertaining. The play lacks thematic depth when compared "+
-      "to other plays by Shakespeare."+
-      "</p> <small>Reviewer2 <cite>Affiliation2</cite></small>"+
-      "%s"+
-      "</blockquote>";
-
-    private JsonObject getRatings(Cookie user, String xreq, String xtraceid, String xspanid,
-                                  String xparentspanid, String xsampled, String xflags, String xotspan){
-      ClientBuilder cb = ClientBuilder.newBuilder();
-      String timeout = star_color.equals("black") ? "10000" : "2500";
-      cb.property("com.ibm.ws.jaxrs.client.connection.timeout", timeout);
-      cb.property("com.ibm.ws.jaxrs.client.receive.timeout", timeout);
-      Client client = cb.build();
-      WebTarget ratingsTarget = client.target(ratings_service);
-      Invocation.Builder builder = ratingsTarget.request(MediaType.APPLICATION_JSON);
-      if(xreq!=null) {
-        builder.header("x-request-id",xreq);
-      }
-      if(xtraceid!=null) {
-        builder.header("x-b3-traceid",xtraceid);
-      }
-      if(xspanid!=null) {
-        builder.header("x-b3-spanid",xspanid);
-      }
-      if(xparentspanid!=null) {
-        builder.header("x-b3-parentspanid",xparentspanid);
-      }
-      if(xsampled!=null) {
-        builder.header("x-b3-sampled",xsampled);
-      }
-      if(xflags!=null) {
-        builder.header("x-b3-flags",xflags);
-      }
-      if(xotspan!=null) {
-        builder.header("x-ot-span-context",xotspan);
-      }
-      if(user!=null) {
-        builder.cookie(user);
-      }
-      Response r = builder.get();
-      int statusCode = r.getStatusInfo().getStatusCode();
-      if (statusCode == Response.Status.OK.getStatusCode() ) {
-        StringReader stringReader = new StringReader(r.readEntity(String.class));
-        try (JsonReader jsonReader = Json.createReader(stringReader)) {
-           JsonObject j = jsonReader.readObject();
-           JsonObjectBuilder jb = Json.createObjectBuilder();
-           for(String key : j.keySet()){
-             int count = j.getInt(key);
-             String stars = "<font color=\""+ star_color +"\">";
-             for(int i=0; i<count; i++){
-               stars += "<span class=\"glyphicon glyphicon-star\"></span>";
-             }
-             stars += "</font>";
-             if(count<5){
-               for(int i=0; i<(5-count); i++){
-                 stars += "<span class=\"glyphicon glyphicon-star-empty\"></span>";
-               }
-             }
-             jb.add(key,stars);
-           }
-           JsonObject result = jb.build();
-           return result;
-        }
-      }else{
-        System.out.println("Error: unable to contact "+ratings_service+" got status of "+statusCode);
-        return null;
-      }
-    }
-
-    @GET
-    @Path("/health")
-    public Response health() {
-        return Response.ok().type(MediaType.TEXT_HTML_TYPE).entity("Reviews is healthy").build();
-    }
-
-    @GET
-    @Path("/reviews")
-    public Response bookReviews(@CookieParam("user") Cookie user,
-                                @HeaderParam("x-request-id") String xreq,
-                                @HeaderParam("x-b3-traceid") String xtraceid,
-                                @HeaderParam("x-b3-spanid") String xspanid,
-                                @HeaderParam("x-b3-parentspanid") String xparentspanid,
-                                @HeaderParam("x-b3-sampled") String xsampled,
-                                @HeaderParam("x-b3-flags") String xflags,
-                                @HeaderParam("x-ot-span-context") String xotspan) {
-      String r1 = "";
-      String r2 = "";
-
-      if(ratings_enabled){
-        JsonObject ratings = getRatings(user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);
-
-        if(ratings!=null){
-          if(ratings.containsKey("Reviewer1")){
-            r1 = ratings.getString("Reviewer1");
-          }
-          if(ratings.containsKey("Reviewer2")){
-            r2 = ratings.getString("Reviewer2");
-          }
-        }else{
-            // return Response.serverError().build();
-            r1 = r2 = "<span class=\"bg-warning\">product ratings not available</span>";
-        }
-      }
-      String replyBody = String.format(review_resp,r1,r2);
-      return Response.ok().type(MediaType.TEXT_HTML_TYPE).entity(replyBody).build();
-    }
-
-    private final static String index = ""+
-    "<html>"+
-    "<head>"+
-    "<meta charset=\"utf-8\">"+
-    "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">"+
-    "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"+
-    "<!-- Latest compiled and minified CSS -->"+
-    "<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css\">"+
-    "<!-- Optional theme -->"+
-    "<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css\">"+
-    "<!-- Latest compiled and minified JavaScript -->"+
-    "<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js\"></script>"+
-    "<!-- Latest compiled and minified JavaScript -->"+
-    "<script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js\"></script>"+
-    "</head>"+
-    "<title>Book reviews service</title>"+
-    "<body>"+
-    "<p><h2>Hello! This is the book reviews service. My content is</h2></p>"+
-    "<div>%s</div>"+
-    "<p>Ratings service enabled? %s</p>"+
-    "<p>Star color: %s </p>"+
-    "</body>"+
-    "</html>";
-
-    @GET
-    @Path("/")
-    public String getDefault(){
-      return String.format(index,review_resp,ratings_enabled,star_color);
-    }
-
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/WEB-INF/ibm-web-ext.xml b/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/WEB-INF/ibm-web-ext.xml
deleted file mode 100644
index 68c5217..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/WEB-INF/ibm-web-ext.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-  Copyright (c) 2017 Istio Authors
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<!DOCTYPE xml>
-<web-ext
-    xmlns="http://websphere.ibm.com/xml/ns/javaee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"
-    version="1.0">
-  <context-root uri="/"/>
-</web-ext>
diff --git a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/WEB-INF/web.xml b/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index a3823f1..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-    version="3.1">
-    <display-name>Liberty Project</display-name>
-
-    <welcome-file-list>
-        <welcome-file>index.html</welcome-file>
-    </welcome-file-list>
-</web-app>
\ No newline at end of file
diff --git a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/index.html b/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/index.html
deleted file mode 100644
index d77e51b..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-application/src/main/webapp/index.html
+++ /dev/null
Binary files differ
diff --git a/demo/apps/bookinfo/src/reviews/reviews-application/src/test/java/test/TestApplication.java b/demo/apps/bookinfo/src/reviews/reviews-application/src/test/java/test/TestApplication.java
deleted file mode 100644
index 16469c7..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-application/src/test/java/test/TestApplication.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 Istio Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *******************************************************************************/ 
-package test;
-
-public class TestApplication {
-
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/Dockerfile b/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/Dockerfile
deleted file mode 100644
index 39abc01..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/Dockerfile
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM websphere-liberty:latest
-
-ENV SERVERDIRNAME reviews
-
-ADD ./servers/LibertyProjectServer /opt/ibm/wlp/usr/servers/defaultServer/
-
-RUN /opt/ibm/wlp/bin/installUtility install  --acceptLicense /opt/ibm/wlp/usr/servers/defaultServer/server.xml
-
-ARG service_version
-ARG enable_ratings
-ARG star_color
-ENV SERVICE_VERSION ${service_version:-v1}
-ENV ENABLE_RATINGS ${enable_ratings:-false}
-ENV STAR_COLOR ${star_color:-black}
-
-CMD /opt/ibm/wlp/bin/server run defaultServer
diff --git a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/build.gradle b/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/build.gradle
deleted file mode 100644
index 5cc57f2..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/build.gradle
+++ /dev/null
@@ -1,23 +0,0 @@
-apply plugin: 'eclipse'
-
-buildscript {
-    repositories {
-        mavenCentral()
-    }
-}
-
-task copyApplication(type: Copy) {
-    from '../reviews-application/build/libs/reviews-application-1.0.war'
-    into 'servers/LibertyProjectServer/apps/'
-}
-
-task build(dependsOn: ['copyApplication']){
-}
-
-task clean {
-    delete "servers/LibertyProjectServer/apps"
-    delete "servers/LibertyProjectServer/lib"
-    delete "servers/LibertyProjectServer/logs"
-    delete "servers/LibertyProjectServer/workarea"
-    delete "servers/LibertyProjectServer/resources"
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/servers/LibertyProjectServer/server.xml b/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/servers/LibertyProjectServer/server.xml
deleted file mode 100644
index aac20bd..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/servers/LibertyProjectServer/server.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!-- Copyright (c) 2017 Istio Authors
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.-->
-<server description="Sample Liberty server">
-
-    <featureManager>
-        <feature>jaxrs-2.0</feature>
-        <feature>jsonp-1.0</feature>
-    </featureManager>
-
-    <httpEndpoint host="*" httpPort="9080" httpsPort="-1"
-                  id="defaultHttpEndpoint"/>
-
-    <webContainer deferServletLoad="false"/>
-    <applicationMonitor dropinsEnabled="false" updateTrigger="mbean"/>
-    <config updateTrigger="mbean"/>
-
-
-    <executor coreThreads="5"/>
-
-    <webApplication contextRoot="/" id="reviews-app" location="reviews-application-1.0.war" name="reviews-app"/>
-
-</server>
diff --git a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/shared/.gitkeep b/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/shared/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/shared/.gitkeep
+++ /dev/null
diff --git a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/EndpointTest.java b/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/EndpointTest.java
deleted file mode 100644
index d594d53..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/EndpointTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 Istio Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *******************************************************************************/ 
-package it;
-
-import static org.junit.Assert.assertTrue;
-
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.Invocation;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Response;
-
-public class EndpointTest {
-
-    public void testEndpoint(String endpoint, String expectedOutput) {
-        String port = System.getProperty("liberty.test.port");
-        String war = System.getProperty("war.name");
-        String url = "http://localhost:" + port + "/" + war + endpoint;
-        System.out.println("Testing " + url);
-        Response response = sendRequest(url, "GET");
-        int responseCode = response.getStatus();
-        assertTrue("Incorrect response code: " + responseCode,
-                   responseCode == 200);
-        
-        String responseString = response.readEntity(String.class);
-        response.close();
-        assertTrue("Incorrect response, response is " + responseString, responseString.contains(expectedOutput));
-    }
-
-    public Response sendRequest(String url, String requestType) {
-        Client client = ClientBuilder.newClient();
-        System.out.println("Testing " + url);
-        WebTarget target = client.target(url);
-        Invocation.Builder invoBuild = target.request();
-        Response response = invoBuild.build(requestType).invoke();
-        return response;
-    }
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/TestApplication.java b/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/TestApplication.java
deleted file mode 100644
index de7fa29..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/TestApplication.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 Istio Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *******************************************************************************/ 
-package it;
-
-import org.junit.Test;
-
-public class TestApplication extends EndpointTest {
-
-    @Test
-    public void testDeployment() {
-        testEndpoint("/index.html", "<h1>Welcome to your Liberty Application</h1>");
-    }
-
-}
diff --git a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/rest/LibertyRestEndpointTest.java b/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/rest/LibertyRestEndpointTest.java
deleted file mode 100644
index 916841f..0000000
--- a/demo/apps/bookinfo/src/reviews/reviews-wlpcfg/src/test/java/it/rest/LibertyRestEndpointTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 Istio Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *******************************************************************************/ 
-package it.rest;
-
-import it.EndpointTest;
-
-import org.junit.Test;
-
-public class LibertyRestEndpointTest extends EndpointTest {
-
-    @Test
-    public void testDeployment() {
-        testEndpoint("/rest", "Hello from the REST endpoint!");
-    }
-}
diff --git a/demo/apps/bookinfo/src/reviews/settings.gradle b/demo/apps/bookinfo/src/reviews/settings.gradle
deleted file mode 100644
index 019d1e8..0000000
--- a/demo/apps/bookinfo/src/reviews/settings.gradle
+++ /dev/null
@@ -1,4 +0,0 @@
-rootProject.name = 'reviews'
-
-include 'reviews-application'
-include 'reviews-wlpcfg'
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..5cd3fe7
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,16 @@
+FROM istio/mixer:0.1.2-6bfa390
+
+RUN apt-get update
+
+# Install tools we might need
+RUN apt-get install -y curl build-essential ca-certificates
+
+RUN mkdir -p /etc/opt/mixer
+
+ADD mixs /usr/local/bin/mixs
+ADD mixc /usr/local/bin/mixc
+
+ADD testdata/apigee /etc/opt/mixer/apigee
+ADD testdata/configroot /etc/opt/mixer/configroot
+
+RUN ln -s /etc/opt/mixer/apigee/adapters.yml /etc/opt/mixer/configroot/scopes/global/adapters.yml
diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 0000000..105a530
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1,3 @@
+copy this Dockerfile file to the mixer repo root
+cp the mixs and mixc binary to mixer repo root (since bazel builds binary in tmp directory outside the mixer root, this step is needed)
+docker build
