diff --git a/gulpfile.js b/gulpfile.js
index 6358835a7..f6a86d4c9 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -13,5 +13,5 @@ var elixir = require('laravel-elixir');
 
 elixir(function(mix) {
     mix.sass('styles.scss');
-    mix.babel('image-manager.js', 'public/js/image-manager.js');
+    mix.scripts('image-manager.js', 'public/js/image-manager.js');
 });
diff --git a/resources/assets/js/image-manager.js b/resources/assets/js/image-manager.js
index 4d24e35c8..3fa72c5bd 100644
--- a/resources/assets/js/image-manager.js
+++ b/resources/assets/js/image-manager.js
@@ -1,176 +1,86 @@
 
 (function() {
 
+    var ImageManager = new Vue({
 
-    class ImageManager extends React.Component {
+        el: '#image-manager',
 
-        constructor(props) {
-            super(props);
-            this.state = {
-                images: [],
-                hasMore: false,
-                page: 0
-            };
-        }
+        data: {
+            images: [],
+            hasMore: false,
+            page: 0,
+            cClickTime: 0
+        },
 
-        show(callback) {
-            $(React.findDOMNode(this)).show();
-            this.callback = callback;
-        }
+        created: function() {
+            // Get initial images
+            this.fetchData(this.page);
+        },
 
-        hide() {
-            console.log('test');
-            $(React.findDOMNode(this)).hide();
-        }
-
-        selectImage(image) {
-            if(this.callback) {
-                this.callback(image);
-            }
-            this.hide();
-        }
-
-        componentDidMount() {
-            var _this = this;
-            // Set initial images
-            $.getJSON('/images/all', data => {
-                this.setState({
-                    images: data.images,
-                    hasMore: data.hasMore
-                });
-            });
+        ready: function() {
             // Create dropzone
-            this.dropZone = new Dropzone(React.findDOMNode(this.refs.dropZone), {
-                url: '/upload/image',
-                init: function() {
-                    var dz = this;
-                    this.on("sending", function(file, xhr, data) {
-                        data.append("_token", document.querySelector('meta[name=token]').getAttribute('content'));
-                    });
-                    this.on("success", function(file, data) {
-                        _this.state.images.unshift(data);
-                        _this.setState({
-                            images: _this.state.images
-                        });
-                        //$(file.previewElement).fadeOut(400, function() {
-                        //    dz.removeFile(file);
-                        //})
-                    });
-                }
-            });
-        }
+            this.setupDropZone();
+        },
 
-        loadMore() {
-            this.state.page++;
-            $.getJSON('/images/all/' + this.state.page, data => {
-                this.setState({
-                    images: this.state.images.concat(data.images),
-                    hasMore: data.hasMore
+        methods: {
+            fetchData: function() {
+                var _this = this;
+                $.getJSON('/images/all/' + _this.page, function(data) {
+                    _this.images = _this.images.concat(data.images);
+                    _this.hasMore = data.hasMore;
+                    _this.page++;
                 });
-            });
-        }
+            },
 
-        overlayClick(e) {
-            if(e.target.className === 'overlay') {
-                this.hide();
+            setupDropZone: function() {
+                var _this = this;
+                var dropZone = new Dropzone(_this.$$.dropZone, {
+                    url: '/upload/image',
+                    init: function() {
+                        var dz = this;
+                        this.on("sending", function(file, xhr, data) {
+                            data.append("_token", document.querySelector('meta[name=token]').getAttribute('content'));
+                        });
+                        this.on("success", function(file, data) {
+                            _this.images.unshift(data);
+                            $(file.previewElement).fadeOut(400, function() {
+                                dz.removeFile(file);
+                            });
+                        });
+                    }
+                });
+            },
+
+            imageClick: function(image) {
+                var dblClickTime = 380;
+                var cTime = (new Date()).getTime();
+                var timeDiff = cTime - this.cClickTime;
+                if(this.cClickTime !== 0 && timeDiff < dblClickTime) {
+                    // DoubleClick
+                    if(this.callback) {
+                        this.callback(image);
+                    }
+                    this.hide();
+                } else {
+                    // Single Click
+                }
+                this.cClickTime = cTime;
+            },
+
+            show: function(callback) {
+                this.callback = callback;
+                this.$$.overlay.style.display = 'block';
+            },
+
+            hide: function() {
+              this.$$.overlay.style.display = 'none';
             }
-        }
-
-        render() {
-            var loadMore = this.loadMore.bind(this);
-            var selectImage = this.selectImage.bind(this);
-            var overlayClick = this.overlayClick.bind(this);
-            var hide = this.hide.bind(this);
-            return (
-                <div className="overlay" onClick={overlayClick}>
-                    <div id="image-manager">
-                        <div className="image-manager-content">
-                            <div className="dropzone-container" ref="dropZone">
-                                <div className="dz-message">Drop files or click here to upload</div>
-                            </div>
-                            <ImageList data={this.state.images} loadMore={loadMore} selectImage={selectImage} hasMore={this.state.hasMore}/>
-                        </div>
-                        <div className="image-manager-sidebar">
-                            <button className="neg button image-manager-close" onClick={hide}>x</button>
-                            <h2>Images</h2>
-                        </div>
-                    </div>
-                </div>
-            );
-        }
-
-    }
-
-    class ImageList extends React.Component {
-
-        render() {
-            var selectImage = this.props.selectImage;
-            var images = this.props.data.map(function(image) {
-                return (
-                    <Image key={image.id} image={image} selectImage={selectImage} />
-                );
-            });
-            return (
-                <div className="image-manager-list clearfix">
-                    {images}
-                    { this.props.hasMore ? <div className="load-more" onClick={this.props.loadMore}>Load More</div> : null }
-                </div>
-            );
-        }
-
-    }
-
-    class Image extends React.Component {
-
-        constructor(){
-            super();
-            this._dblClickTime = 350;
-            this._cClickTime = 0;
-        }
-
-        setImage() {
-            this.props.selectImage(this.props.image);
-        }
-
-        imageClick() {
-            var cTime = (new Date()).getTime();
-            var timeDiff = cTime - this._cClickTime;
-            console.log(timeDiff);
-            if(this._cClickTime !== 0 && timeDiff < this._dblClickTime) {
-                // DoubleClick
-                this.setImage();
-            } else {
-                // Single Click
-            }
-            this._cClickTime = cTime;
-        }
-
-        render() {
-            var imageClick = this.imageClick.bind(this);
-            return (
-                <div>
-                    <img onClick={imageClick} src={this.props.image.thumbnail}/>
-                </div>
-            );
-        }
-
-    }
-
-    class ImageInfoPage extends React.Component {
-
-        render() {
 
         }
 
-    }
+    });
 
-    if(document.getElementById('image-manager-container')) {
-        window.ImageManager = React.render(
-            <ImageManager />,
-            document.getElementById('image-manager-container')
-        );
-    }
-
-})();
+    window.ImageManager = ImageManager;
 
 
+})();
\ No newline at end of file
diff --git a/resources/assets/sass/image-manager.scss b/resources/assets/sass/image-manager.scss
index 1c6220fda..456a7a8c3 100644
--- a/resources/assets/sass/image-manager.scss
+++ b/resources/assets/sass/image-manager.scss
@@ -1,4 +1,4 @@
-#image-manager {
+.image-manager-body {
   background-color: rgb(37, 37, 37);
   max-width: 90%;
   max-height: 90%;
diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php
index bf913c144..8e102e3d3 100644
--- a/resources/views/base.blade.php
+++ b/resources/views/base.blade.php
@@ -12,7 +12,7 @@
     <script src="/bower/bootstrap/dist/js/bootstrap.js"></script>
     <script src="/bower/jquery-sortable/source/js/jquery-sortable.js"></script>
     <script src="/bower/dropzone/dist/min/dropzone.min.js"></script>
-    <script src="https://fb.me/react-0.13.3.js"></script>
+    <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/0.12.10/vue.min.js"></script>
     <script>
         $.fn.smoothScrollTo = function() {
             if(this.length === 0) return;
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index 8466c6d88..a2e283482 100644
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -6,9 +6,10 @@
 
 
 @section('bottom')
+    @include('pages/image-manager')
     <div id="image-manager-container"></div>
     <script src="/js/image-manager.js"></script>
     <script>
-        window.ImageManager.show();
+        //window.ImageManager.show();
     </script>
 @stop
\ No newline at end of file
diff --git a/resources/views/pages/edit.blade.php b/resources/views/pages/edit.blade.php
index 9806c9232..421344774 100644
--- a/resources/views/pages/edit.blade.php
+++ b/resources/views/pages/edit.blade.php
@@ -14,6 +14,7 @@
 @stop
 
 @section('bottom')
+    @include('pages/image-manager')
     <div id="image-manager-container"></div>
     <script src="/js/image-manager.js"></script>
 @stop
\ No newline at end of file
diff --git a/resources/views/pages/image-manager.blade.php b/resources/views/pages/image-manager.blade.php
index ef52a43d7..5a8dc20ae 100644
--- a/resources/views/pages/image-manager.blade.php
+++ b/resources/views/pages/image-manager.blade.php
@@ -1,27 +1,22 @@
-<section class="overlay" style="display:none;">
-{{--<section class="overlay">--}}
-    <div id="image-manager">
-        <div class="image-manager-left">
-            <div class="image-manager-header">
-                <button type="button" class="button neg float right" data-action="close">Close</button>
-                <div class="image-manager-title">Image Library</div>
-            </div>
-            <div class="image-manager-display-wrap">
-                <div class="image-manager-display">
-                    <div class="uploads"></div>
-                    <div class="images">
-                        <div class="load-more">Load More</div>
+
+<div id="image-manager">
+    <div class="overlay" v-el="overlay" style="display:none;">
+        <div class="image-manager-body">
+            <div class="image-manager-content">
+                <div class="dropzone-container" v-el="dropZone">
+                    <div class="dz-message">Drop files or click here to upload</div>
+                </div>
+                <div class="image-manager-list">
+                    <div v-repeat="image: images">
+                        <img v-attr="src: image.thumbnail" v-on="click: imageClick(image)" alt="@{{image.name}}">
                     </div>
+                    <div class="load-more" v-show="hasMore" v-on="click: fetchData">Load More</div>
                 </div>
             </div>
-            <form action="/upload/image"
-                  class="dropzone"
-                  id="image-upload-dropzone">
-                {!! csrf_field() !!}
-            </form>
+            <div class="image-manager-sidebar">
+                <button class="neg button image-manager-close">x</button>
+                <h2>Images</h2>
+            </div>
         </div>
-        {{--<div class="sidebar">--}}
-
-        {{--</div>--}}
     </div>
-</section>
\ No newline at end of file
+</div>