diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b3085b8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+*.pyc
+*.sw?
+*.sqlite3
+.DS_STORE
+*.egg-info
+.venv
+.tox
+build
+dist
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100755
index 0000000..1ce94ae
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,8 @@
+include README.txt
+recursive-include xstatic/pkg/magic_search *
+
+global-exclude *.pyc
+global-exclude *.pyo
+global-exclude *.orig
+global-exclude *.rej
+
diff --git a/README.txt b/README.txt
new file mode 100755
index 0000000..24bf752
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,21 @@
+XStatic-MagicSearch
+-------------------
+
+MagicSearch is an AngularJS directive that provides a UI for both faceted
+filtering and as-you-type filtering. It is intended for filtering tables,
+such as an AngularJS smart-table, but it can be used in any situation
+where you can provide it with facets/options and consume its events.
+
+MagicSearch was initially developed by David Kavanagh for Eucalyptus.
+
+
+MagicSearch javascript library packaged for setuptools (easy_install) / pip.
+
+This package is intended to be used by **any** project that needs these files.
+
+It intentionally does **not** provide any extra code except some metadata
+**nor** has any extra requirements. You MAY use some minimal support code from
+the XStatic base package, if you like.
+
+You can find more info about the xstatic packaging way in the package `XStatic`.
+
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..b8765cd
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,27 @@
+from xstatic.pkg import magic_search as xs
+
+# The README.txt file should be written in reST so that PyPI can use
+# it to generate your project's PyPI page.
+long_description = open('README.txt').read()
+
+from setuptools import setup, find_packages
+
+setup(
+ name=xs.PACKAGE_NAME,
+ version=xs.PACKAGE_VERSION,
+ description=xs.DESCRIPTION,
+ long_description=long_description,
+ classifiers=xs.CLASSIFIERS,
+ keywords=xs.KEYWORDS,
+ maintainer=xs.MAINTAINER,
+ maintainer_email=xs.MAINTAINER_EMAIL,
+ license=xs.LICENSE,
+ url=xs.HOMEPAGE,
+ platforms=xs.PLATFORMS,
+ packages=find_packages(),
+ namespace_packages=['xstatic', 'xstatic.pkg', ],
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=[], # nothing! :)
+ # if you like, you MAY use the 'XStatic' package.
+)
diff --git a/xstatic/__init__.py b/xstatic/__init__.py
new file mode 100755
index 0000000..de40ea7
--- /dev/null
+++ b/xstatic/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/xstatic/pkg/__init__.py b/xstatic/pkg/__init__.py
new file mode 100755
index 0000000..de40ea7
--- /dev/null
+++ b/xstatic/pkg/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/xstatic/pkg/magic_search/__init__.py b/xstatic/pkg/magic_search/__init__.py
new file mode 100755
index 0000000..9d03d34
--- /dev/null
+++ b/xstatic/pkg/magic_search/__init__.py
@@ -0,0 +1,49 @@
+"""
+XStatic resource package
+
+See package 'XStatic' for documentation and basic tools.
+"""
+
+DISPLAY_NAME = 'Magic-Search' # official name, upper/lowercase allowed, no spaces
+PACKAGE_NAME = 'XStatic-%s' % DISPLAY_NAME # name used for PyPi
+
+NAME = __name__.split('.')[-1] # package name (e.g. 'foo' or 'foo_bar')
+ # please use a all-lowercase valid python
+ # package name
+
+VERSION = '0.1.5' # version of the packaged files, please use the upstream
+ # version number
+BUILD = '9' # our package build number, so we can release new builds
+ # with fixes for xstatic stuff.
+PACKAGE_VERSION = VERSION + '.' + BUILD # version used for PyPi
+
+DESCRIPTION = "%s %s (XStatic packaging standard)" % (DISPLAY_NAME, VERSION)
+
+PLATFORMS = 'any'
+CLASSIFIERS = []
+KEYWORDS = '%s xstatic' % NAME
+
+# XStatic-* package maintainer:
+MAINTAINER = 'Randy Bertram'
+MAINTAINER_EMAIL = 'rbertram@us.ibm.com'
+
+# this refers to the project homepage of the stuff we packaged:
+HOMEPAGE = 'https://github.com/eucalyptus/magic-search'
+
+# this refers to all files:
+LICENSE = '(same as %s)' % DISPLAY_NAME
+
+from os.path import join, dirname
+BASE_DIR = join(dirname(__file__), 'data')
+# linux package maintainers just can point to their file locations like this:
+#BASE_DIR = '/usr/share/javascript/jquery'
+
+LOCATIONS = {
+ # CDN locations (if no public CDN exists, use an empty dict)
+ # if value is a string, it is a base location, just append relative
+ # path/filename. if value is a dict, do another lookup using the
+ # relative path/filename you want.
+ # your relative path/filenames should usually be without version
+ # information, because either the base dir/url is exactly for this
+ # version or the mapping will care for accessing this version.
+}
diff --git a/xstatic/pkg/magic_search/data/magic_search.css b/xstatic/pkg/magic_search/data/magic_search.css
new file mode 100755
index 0000000..ef63fea
--- /dev/null
+++ b/xstatic/pkg/magic_search/data/magic_search.css
@@ -0,0 +1,85 @@
+/* Copyright 2014-2015 Eucalyptus Systems, Inc. */
+/*-----------------------------------------
+ Colors
+ ----------------------------------------- */
+/*-----------------------------------------
+ Item list
+ ----------------------------------------- */
+/*-----------------------------------------
+ Magic Search bar
+ ----------------------------------------- */
+/* line 30, ../src/magic_search.scss */
+.search-bar {
+ position: relative;
+ border: 1px solid black;
+ background-color: white;
+ margin-bottom: 0.5rem;
+ padding: 4px;
+ height: auto;
+}
+/* line 37, ../src/magic_search.scss */
+.search-bar i.fi-filter {
+ color: #444444;
+ position: absolute;
+ top: 0.5rem;
+ left: 0.65rem;
+}
+/* line 46, ../src/magic_search.scss */
+.search-bar #search-main-area {
+ position: relative;
+ margin-left: 1.65rem;
+ margin-right: 1.65rem;
+ cursor: text;
+}
+/* line 14, ../src/magic_search.scss */
+.search-bar .item-list {
+ margin-bottom: 6px;
+}
+/* line 16, ../src/magic_search.scss */
+.search-bar .item-list .item {
+ color: #333;
+ background-color: #e6e7e8;
+ margin-right: 8px;
+}
+/* line 20, ../src/magic_search.scss */
+.search-bar .item-list .item a {
+ color: white;
+}
+/* line 53, ../src/magic_search.scss */
+.search-bar .item-list {
+ margin-bottom: 2px;
+}
+/* line 56, ../src/magic_search.scss */
+.search-bar #search-selected {
+ background-color: white;
+ color: #444444;
+}
+/* line 60, ../src/magic_search.scss */
+.search-bar #search-entry {
+ display: inline-block;
+ height: 1.5rem;
+}
+/* line 64, ../src/magic_search.scss */
+.search-bar #search-input {
+ width: 220px;
+ border: 0;
+ box-shadow: none;
+ height: 1.5rem;
+ padding: 3px;
+ background-color: white;
+}
+/* line 75, ../src/magic_search.scss */
+.search-bar .match {
+ font-weight: bold;
+}
+/* line 78, ../src/magic_search.scss */
+.search-bar i.cancel {
+ color: #444444;
+ position: absolute;
+ top: 0.5rem;
+ right: 0.65rem;
+}
+/* line 80, ../src/magic_search.scss */
+.search-bar i.cancel:hover {
+ color: darkred;
+}
diff --git a/xstatic/pkg/magic_search/data/magic_search.html b/xstatic/pkg/magic_search/data/magic_search.html
new file mode 100755
index 0000000..e32e795
--- /dev/null
+++ b/xstatic/pkg/magic_search/data/magic_search.html
@@ -0,0 +1,49 @@
+
+