diff --git a/MANIFEST.MF b/MANIFEST.MF
new file mode 100644
index 0000000..f69515c
--- /dev/null
+++ b/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Deploy-Class:
+Plugin-Name: Excel Reader
+Plugin-Version: 1.0
+Author: Xander
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..6402f86
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/conf/toolbox-ext.xml b/conf/toolbox-ext.xml
new file mode 100644
index 0000000..57518c1
--- /dev/null
+++ b/conf/toolbox-ext.xml
@@ -0,0 +1,6 @@
+
+ excel
+ application
+ nl.isaac.dotcms.excelreader.viewtool.ExcelReaderTool
+
+
diff --git a/lib/poi-ooxml-3.6-20091214.jar b/lib/poi-ooxml-3.6-20091214.jar
new file mode 100644
index 0000000..c986646
Binary files /dev/null and b/lib/poi-ooxml-3.6-20091214.jar differ
diff --git a/src/nl/isaac/dotcms/excelreader/shared/CacheGroupHandler.java b/src/nl/isaac/dotcms/excelreader/shared/CacheGroupHandler.java
new file mode 100644
index 0000000..eeedbd5
--- /dev/null
+++ b/src/nl/isaac/dotcms/excelreader/shared/CacheGroupHandler.java
@@ -0,0 +1,86 @@
+package nl.isaac.dotcms.excelreader.shared;
+/**
+* ExcelReader by ISAAC - The Full Service Internet Agency is licensed
+* under a Creative Commons Attribution 3.0 Unported License
+* - http://creativecommons.org/licenses/by/3.0/
+* - http://www.geekyplugins.com/
+*
+* @copyright Copyright (c) 2011 ISAAC Software Solutions B.V. (http://www.isaac.nl)
+*/
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+import com.dotmarketing.business.CacheLocator;
+import com.dotmarketing.business.DotCacheAdministrator;
+import com.dotmarketing.business.DotCacheException;
+import com.dotmarketing.util.Logger;
+/**
+ * Class that handles the dotCMS cache. It uses an ItemHandler to retrieve items that aren't stored in the cache yet
+ *
+ * @author xander
+ *
+ * @param
+ */
+public class CacheGroupHandler {
+ private String groupName;
+ protected ItemHandler itemHandler;
+
+ public CacheGroupHandler(String groupName, ItemHandler itemHandler) {
+ this.groupName = groupName;
+ this.itemHandler = itemHandler;
+ }
+
+ public T get(String key) {
+ DotCacheAdministrator cache = CacheLocator.getCacheAdministrator();
+ Object o = null;
+
+ if(!itemHandler.isChanged(key)) {
+ try {
+ o = cache.get(key, groupName);
+ } catch (DotCacheException e) {
+ Logger.info(this.getClass(), String.format("DotCacheException for Group '%s', key '%s', message: %s", groupName, key, e.getMessage()));
+ }
+ }
+
+ if(o == null) {
+ T t = itemHandler.get(key);
+ put(key, t);
+ return t;
+ } else {
+ return (T)o;
+ }
+ }
+
+ public void put(String key, T t) {
+ DotCacheAdministrator cache = CacheLocator.getCacheAdministrator();
+ cache.put(key, t, groupName);
+ }
+
+ /**
+ * Updates the given key by calling the itemhandler's get method
+ */
+ public void updateWithItemHandler(String key) {
+ remove(key);
+ put(key, itemHandler.get(key));
+ }
+
+ public void remove(String key) {
+ DotCacheAdministrator cache = CacheLocator.getCacheAdministrator();
+ cache.remove(key, groupName);
+ }
+
+ public void fillInitialCache() {
+ removeAll();
+ Map initialCache = itemHandler.getInitialCache();
+ for(Entry entry: initialCache.entrySet()) {
+ put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ public void removeAll() {
+ DotCacheAdministrator cache = CacheLocator.getCacheAdministrator();
+ cache.flushGroup(groupName);
+ }
+
+}
diff --git a/src/nl/isaac/dotcms/excelreader/shared/ItemHandler.java b/src/nl/isaac/dotcms/excelreader/shared/ItemHandler.java
new file mode 100644
index 0000000..974c13c
--- /dev/null
+++ b/src/nl/isaac/dotcms/excelreader/shared/ItemHandler.java
@@ -0,0 +1,24 @@
+package nl.isaac.dotcms.excelreader.shared;
+/**
+* ExcelReader by ISAAC - The Full Service Internet Agency is licensed
+* under a Creative Commons Attribution 3.0 Unported License
+* - http://creativecommons.org/licenses/by/3.0/
+* - http://www.geekyplugins.com/
+*
+* @copyright Copyright (c) 2011 ISAAC Software Solutions B.V. (http://www.isaac.nl)
+*/
+
+import java.util.Map;
+
+/**
+ * Interface for handling an item that is not available in the cache
+ *
+ * @author xander
+ *
+ * @param
+ */
+public interface ItemHandler {
+ public T get(String key);
+ public boolean isChanged(String key);
+ public Map getInitialCache();
+}
\ No newline at end of file
diff --git a/src/nl/isaac/dotcms/excelreader/util/DefaultRowStrategy.java b/src/nl/isaac/dotcms/excelreader/util/DefaultRowStrategy.java
new file mode 100644
index 0000000..725fb60
--- /dev/null
+++ b/src/nl/isaac/dotcms/excelreader/util/DefaultRowStrategy.java
@@ -0,0 +1,33 @@
+package nl.isaac.dotcms.excelreader.util;
+/**
+* ExcelReader by ISAAC - The Full Service Internet Agency is licensed
+* under a Creative Commons Attribution 3.0 Unported License
+* - http://creativecommons.org/licenses/by/3.0/
+* - http://www.geekyplugins.com/
+*
+* @copyright Copyright (c) 2011 ISAAC Software Solutions B.V. (http://www.isaac.nl)
+*/
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import nl.isaac.dotcms.excelreader.util.ExcelUtil.RowStrategy;
+/**
+ * This row strategy just returns given row
+ *
+ * @author xander
+ *
+ */
+public class DefaultRowStrategy implements RowStrategy {
+ private List