diff --git a/README.md b/README.md
index c59f078..398f2c2 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,6 @@
 The following may be interesting env vars for configuration:
 
 * APID_API_PORT
-* APID_GATEWAYDEPLOY_GITHUB_ACCESSTOKEN
 
 ## Running tests
 
diff --git a/deployments.go b/deployments.go
index f618510..c10a212 100644
--- a/deployments.go
+++ b/deployments.go
@@ -3,7 +3,6 @@
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/30x/apidGatewayDeploy/github"
 	"io"
 	"net/http"
 	"net/url"
@@ -22,7 +21,6 @@
 )
 
 var (
-	gitHubAccessToken string // todo: temporary - will not be used
 	downloadMultiplier = 10 * time.Second
 )
 
@@ -83,30 +81,26 @@
 		return nil, fmt.Errorf("DownloadFileUrl: Failed to parse urlStr: %s", uriString)
 	}
 
-	// todo: temporary - if not a github url, just open it or call GET on it
-	if uri.Host != "github.com" {
-		// assume it's a file if no scheme
-		if uri.Scheme == "" || uri.Scheme == "file" {
-			f, err := os.Open(uri.Path)
-			if err != nil {
-				return nil, err
-			}
-			return f, nil
-		}
+	// todo: Temporary blind bundle download, Bundle storage TBD
 
-		// some random uri, try to GET it
-		res, err := http.Get(uriString)
+	// assume it's a file if no scheme
+	if uri.Scheme == "" || uri.Scheme == "file" {
+		f, err := os.Open(uri.Path)
 		if err != nil {
 			return nil, err
 		}
-		if res.StatusCode != 200 {
-			return nil, fmt.Errorf("Bundle uri %s failed with status %s", uriString, res.StatusCode)
-		}
-		return res.Body, nil
+		return f, nil
 	}
 
-	// go get it from github using access token
-	return github.GetUrlData(uri, gitHubAccessToken)
+	// some random uri, try to GET it
+	res, err := http.Get(uriString)
+	if err != nil {
+		return nil, err
+	}
+	if res.StatusCode != 200 {
+		return nil, fmt.Errorf("Bundle uri %s failed with status %s", uriString, res.StatusCode)
+	}
+	return res.Body, nil
 }
 
 // check if already exists and skip
diff --git a/github/github.go b/github/github.go
deleted file mode 100644
index 9abd321..0000000
--- a/github/github.go
+++ /dev/null
@@ -1,212 +0,0 @@
-package github
-
-import (
-	"bytes"
-	"encoding/json"
-	"errors"
-	"fmt"
-	"github.com/30x/apid"
-	"io"
-	"io/ioutil"
-	"net/http"
-	"net/http/httputil"
-	"net/url"
-	"os"
-	"regexp"
-	"strings"
-)
-
-var log apid.LogService
-
-func Init(services apid.Services) {
-	log = services.Log()
-}
-
-func printResponseInfo(resp *http.Response) {
-	d, _ := httputil.DumpResponse(resp, false)
-	s := strings.Replace(string(d), "\n", "\n  ", -1)
-	fmt.Printf("DumpResponse: %s", s)
-}
-
-func jsonPrettyPrint(in []byte) {
-	var out bytes.Buffer
-	err := json.Indent(&out, in, "", "\t")
-	if err != nil {
-		s := string(in)
-		if len(s) > 512 {
-			s = s[:512]
-		}
-		fmt.Printf("jsonPrettyPrint err: %v (raw snippet): %s\n", err, s)
-	}
-	fmt.Printf("jsonPrettyPrint: %s\n", out.String())
-}
-
-//  SaveContentFile() invokes GetContentFileData() and writes
-//  to a destination file. Optional 'destFileName' param defaults to
-//  content file name if empty string
-func SaveContentFile(repo string, contentFilePath string, ref string, destDir string, destFileName string, accessToken string) (destFilePath string, err error) {
-	data, err := GetContentFileData(repo, contentFilePath, ref, accessToken)
-	if err != nil {
-		log.Errorf("Failed getting content file data: %v", err)
-		return
-	}
-	if err = os.MkdirAll(destDir, 0700); err != nil {
-		log.Errorf("Failed dest directory creation: %v", err)
-		return
-	}
-	defer data.Close()
-	if destFileName == "" {
-		x := strings.LastIndex(contentFilePath, "/")
-		destFileName = contentFilePath[x+1:] // exclude leading slash
-	}
-	destFilePath = destDir + "/" + destFileName
-	f, err := os.Create(destFilePath)
-	if err != nil {
-		log.Errorf("Failed dest file creation: %v", err)
-	}
-
-	if _, err := io.Copy(f, data); err != nil {
-		log.Errorf("Failed dest file copy: %v", err)
-	}
-	return
-}
-
-/*  GetUrlData() validates GitHub URL and invokes GetContentFileData()
-    to return file data as a ReadCloser, which must be closed.
-*/
-func GetUrlData(u *url.URL, accessToken string) (io.ReadCloser, error) {
-
-	if accessToken == "" {
-		return nil, fmt.Errorf("invalid accessToken: %v", accessToken)
-	}
-
-	regexStr := `^/(.*)/(blob|raw)/([^/]+)/(.*)$`
-	validPath := regexp.MustCompile(regexStr)
-	m := validPath.FindStringSubmatch(u.Path)
-	if len(m) == 0 {
-		return nil, errors.New("DownloadFileUrl Invalid URL path (" + u.Path + ") does not match regex: " + regexStr)
-	}
-	fmt.Printf("DownloadFileUrl: matches: %v\n", m)
-	repo := m[1]
-	branch := m[3]
-	contentFilePath := m[4]
-	return GetContentFileData(repo, contentFilePath, branch, accessToken)
-}
-
-//  GetContentFileData() uses GitHub OAuth access token to retrieve
-//  metadata and returns a ReadCloser with file content data from a
-//  GitHub public/private repo.
-func GetContentFileData(repo string, contentFilePath string, ref string, accessToken string) (data io.ReadCloser, err error) {
-	log.Debug("repo:", repo)
-	log.Debug("contentFilePath:", contentFilePath)
-	log.Debug("ref:", ref)
-
-	x := strings.LastIndex(contentFilePath, "/")
-	parentPath := contentFilePath[:x+1] // include trailing slash
-	fileName := contentFilePath[x+1:]   // exclude leading slash
-	log.Debug("parentPath:", parentPath)
-	log.Debug("fileName:", fileName)
-
-	//url := "https://api.github.com/repos/apigee-internal/apidx/contents/mockdata/kms/kms.db-shm?ref=master"
-	url := "https://api.github.com/repos/" + repo + "/contents" + parentPath + "?ref=" + ref
-
-	client := &http.Client{
-	//CheckRedirect: redirectPolicyFunc,
-	}
-	req, err := http.NewRequest("GET", url, nil)
-	if strings.HasPrefix(accessToken, "UPDATE_FROM_GITHUB_API") {
-		log.Debug("GitHubAccessToken not configured, so omitting Authorization header")
-	} else {
-		req.Header.Add("Authorization", "token "+accessToken)
-	}
-	req.Header.Add("Accept", "application/vnd.github.v3.json")
-	req.Header.Add("Content-Type", "application/json")
-	resp, err := client.Do(req)
-	if err != nil {
-		// handle error
-	}
-	defer resp.Body.Close()
-	body, err := ioutil.ReadAll(resp.Body)
-	printResponseInfo(resp)
-
-	// pretty-print JSON output
-	jsonPrettyPrint(body)
-
-	// parse JSON response
-	type GitHubContentFile struct {
-		Name        string `json:"name"`
-		Path        string `json:"path"`
-		Sha         string `json:"sha"`
-		Size        int32  `json:"size"`
-		Url         string `json:"url"`
-		Type        string `json:"type"`
-		DownloadUrl string `json:"download_url"`
-		// ...
-	}
-	var contents []GitHubContentFile
-	err = json.Unmarshal(body, &contents)
-	if err != nil {
-		log.Errorf("Failed to parse JSON response: %v", err)
-	}
-	fmt.Printf("GitHubContentResp: %+v\n", contents)
-
-	// find target content file info
-	var downloadUrl string
-	var contentPtr *GitHubContentFile
-	for _, c := range contents {
-		if c.Name == fileName {
-			contentPtr = &c
-			break
-		}
-	}
-	if contentPtr == nil {
-		log.Errorf("Error: no content found for: %s", contentFilePath)
-	} else {
-		fmt.Printf("Found %s with download_url: %s\n", fileName, contentPtr.DownloadUrl)
-		downloadUrl = contentPtr.DownloadUrl
-	}
-	// download target content file
-	resp2, err := client.Get(downloadUrl)
-	if err != nil {
-		log.Errorf("Error on download: %v", err)
-		return
-	}
-	printResponseInfo(resp2)
-
-	return resp2.Body, nil
-}
-
-//func main() {
-//
-//	log.Debug("GitHubGet start")
-//	destDir := "./data"
-//	accessToken := "abc123"
-//
-//	url, err := url.Parse("https://github.com/apigee-internal/apidx/blob/master/NOTICE")
-//	if (err != nil) {
-//		log.Errorf("Failed to parse URL: %v", err)
-//		return
-//	}
-//
-//	data, err := GetUrlData(url, accessToken)
-//	if (err != nil) {
-//		log.Errorf("Failed to get URL data: %v", err)
-//		return
-//	}
-//	defer data.Close()
-//
-//	if newFile, err := SaveContentFile("apigee-internal/apidx", "/README.md", "master", destDir, "", accessToken); err == nil {
-//		stat, _ := os.Stat(newFile)
-//		fmt.Printf("SaveContentFile: %+v", stat)
-//	} else {
-//		log.Errorf("Failed to save content file: %v", err)
-//	}
-//
-//	if newFile, err := SaveContentFile("apigee-internal/apidx", "/README.md", "master", destDir, "saved_file_1", accessToken); err == nil {
-//		stat, _ := os.Stat(newFile)
-//		fmt.Printf("SaveContentFile: %+v", stat)
-//	} else {
-//		log.Errorf("Failed to save content file: %v", err)
-//	}
-//
-//}
diff --git a/init.go b/init.go
index 5874bbd..4468f08 100644
--- a/init.go
+++ b/init.go
@@ -2,14 +2,12 @@
 
 import (
 	"github.com/30x/apid"
-	"github.com/30x/apidGatewayDeploy/github"
 	"os"
 	"path"
 )
 
 const (
-	configBundleDirKey      = "gatewaydeploy_bundle_dir"
-	configGithubAccessToken = "gatewaydeploy_github_accesstoken"
+	configBundleDirKey = "gatewaydeploy_bundle_dir"
 )
 
 var (
@@ -26,8 +24,6 @@
 	log = services.Log().ForModule("apiGatewayDeploy")
 	log.Debug("start init")
 
-	github.Init(services)
-
 	config := services.Config()
 	config.SetDefault(configBundleDirKey, "bundles")
 
@@ -40,8 +36,6 @@
 	bundlePath = path.Join(storagePath, relativeBundlePath)
 	log.Infof("Bundle directory path is %s", bundlePath)
 
-	gitHubAccessToken = config.GetString(configGithubAccessToken)
-
 	db, err = services.Data().DB()
 	if err != nil {
 		log.Panic("Unable to access DB", err)
