diff --git a/src/objectliterals.exports b/src/objectliterals.exports
index 0e24207a11..3c8adf12f3 100644
--- a/src/objectliterals.exports
+++ b/src/objectliterals.exports
@@ -12,6 +12,7 @@
@exportObjectLiteralProperty ol.MapOptions.renderers Array.
|undefined
@exportObjectLiteralProperty ol.MapOptions.shiftDragZoom boolean|undefined
@exportObjectLiteralProperty ol.MapOptions.target Element|string
+@exportObjectLiteralProperty ol.MapOptions.touchPan boolean|undefined
@exportObjectLiteralProperty ol.MapOptions.view ol.IView|undefined
@exportObjectLiteralProperty ol.MapOptions.zoomControl boolean|undefined
@exportObjectLiteralProperty ol.MapOptions.zoomDelta number|undefined
diff --git a/src/ol/interaction/touchinteraction.js b/src/ol/interaction/touchinteraction.js
new file mode 100644
index 0000000000..c71d5997de
--- /dev/null
+++ b/src/ol/interaction/touchinteraction.js
@@ -0,0 +1,119 @@
+
+goog.provide('ol.interaction.Touch');
+
+goog.require('goog.functions');
+goog.require('ol.MapBrowserEvent');
+goog.require('ol.MapBrowserEvent.EventType');
+goog.require('ol.Pixel');
+goog.require('ol.interaction.Interaction');
+
+
+
+/**
+ * @constructor
+ * @extends {ol.interaction.Interaction}
+ */
+ol.interaction.Touch = function() {
+
+ goog.base(this);
+
+ /**
+ * @type {boolean}
+ * @private
+ */
+ this.handled_ = false;
+
+ /**
+ * @type {Object}
+ * @private
+ */
+ this.trackedTouches_ = {};
+
+ /**
+ * @type {Array.