diff --git a/lib/appframework/app.php b/lib/appframework/app.php
index 6224b858bbfc12da19204192db1dd6fd2aa99f61..7ff55bb809d1ddcfeef1142547878a8fcf3e1805 100644
--- a/lib/appframework/app.php
+++ b/lib/appframework/app.php
@@ -25,6 +25,7 @@
 namespace OC\AppFramework;
 
 use OC\AppFramework\DependencyInjection\DIContainer;
+use OCP\AppFramework\IAppContainer;
 
 
 /**
@@ -45,7 +46,7 @@ class App {
 	 * @param DIContainer $container an instance of a pimple container.
 	 */
 	public static function main($controllerName, $methodName, array $urlParams,
-								DIContainer $container) {
+	                            IAppContainer $container) {
 		$container['urlParams'] = $urlParams;
 		$controller = $container[$controllerName];
 
diff --git a/lib/appframework/core/api.php b/lib/appframework/core/api.php
index eb8ee01e5db7b367535080300060989d304c8708..337e3b57d6d6ac29efd504eef348dd22ebeb5f34 100644
--- a/lib/appframework/core/api.php
+++ b/lib/appframework/core/api.php
@@ -23,6 +23,7 @@
 
 
 namespace OC\AppFramework\Core;
+use OCP\AppFramework\IApi;
 
 
 /**
@@ -32,7 +33,7 @@ namespace OC\AppFramework\Core;
  * Should you find yourself in need for more methods, simply inherit from this
  * class and add your methods
  */
-class API {
+class API implements IApi{
 
 	private $appName;
 
diff --git a/lib/appframework/dependencyinjection/dicontainer.php b/lib/appframework/dependencyinjection/dicontainer.php
index 88ad2cd414a064c98d8f8a060dbd1ee02a3085d5..43f6eee29b03a477e65d487c8a1db7d910801db9 100644
--- a/lib/appframework/dependencyinjection/dicontainer.php
+++ b/lib/appframework/dependencyinjection/dicontainer.php
@@ -32,9 +32,11 @@ use OC\AppFramework\Middleware\MiddlewareDispatcher;
 use OC\AppFramework\Middleware\Security\SecurityMiddleware;
 use OC\AppFramework\Utility\SimpleContainer;
 use OC\AppFramework\Utility\TimeFactory;
+use OCP\AppFramework\IApi;
+use OCP\AppFramework\IAppContainer;
 
 
-class DIContainer extends SimpleContainer {
+class DIContainer extends SimpleContainer implements IAppContainer{
 
 
 	/**
@@ -45,6 +47,8 @@ class DIContainer extends SimpleContainer {
 
 		$this['AppName'] = $appName;
 
+		$this->registerParameter('ServerContainer', \OC::$server);
+
 		$this['API'] = $this->share(function($c){
 			return new API($c['AppName']);
 		});
@@ -119,4 +123,19 @@ class DIContainer extends SimpleContainer {
 	}
 
 
+	/**
+	 * @return IApi
+	 */
+	function getCoreApi()
+	{
+		return $this->query('API');
+	}
+
+	/**
+	 * @return \OCP\Core\IServerContainer
+	 */
+	function getServer()
+	{
+		return $this->query('ServerContainer');
+	}
 }
diff --git a/lib/public/appframework/App.php b/lib/public/appframework/App.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c27fcb2ac5e10008de4f1b0845e8d33e39f1f64
--- /dev/null
+++ b/lib/public/appframework/App.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace OCP\AppFramework;
+
+
+/**
+ * Class App
+ * @package OCP\AppFramework
+ *
+ * Any application must inherit this call - all controller instances to be used are
+ * to be registered using IContainer::registerService
+ */
+class App {
+	public function __construct($appName) {
+		$this->container = new \OC\AppFramework\DependencyInjection\DIContainer($appName);
+	}
+
+	private $container;
+
+	/**
+	 * @return IAppContainer
+	 */
+	public function getContainer() {
+		return $this->container;
+	}
+
+	/**
+	 * This function is called by the routing component to fire up the frameworks dispatch mechanism.
+	 *
+	 * Example code in routes.php of the task app:
+	 * $this->create('tasks_index', '/')->get()->action(
+	 *		function($params){
+	 *			$app = new TaskApp();
+	 *			$app->dispatch('PageController', 'index', $params);
+	 *		}
+	 *	);
+	 *
+	 *
+	 * Example for for TaskApp implementation:
+	 * class TaskApp extends \OCP\AppFramework\App {
+	 *
+	 *		public function __construct(){
+	 *			parent::__construct('tasks');
+	 *
+	 *			$this->getContainer()->registerService('PageController', function(IAppContainer $c){
+	 *				$a = $c->query('API');
+	 *				$r = $c->query('Request');
+	 *				return new PageController($a, $r);
+	 *			});
+	 *		}
+	 *	}
+	 *
+	 * @param string $controllerName the name of the controller under which it is
+	 *                               stored in the DI container
+	 * @param string $methodName the method that you want to call
+	 * @param array $urlParams an array with variables extracted from the routes
+	 */
+	public function dispatch($controllerName, $methodName, array $urlParams) {
+		\OC\AppFramework\App::main($controllerName, $methodName, $urlParams, $this->container);
+	}
+}
diff --git a/lib/public/appframework/iapi.php b/lib/public/appframework/iapi.php
new file mode 100644
index 0000000000000000000000000000000000000000..5374f0dcaf5cc3ee046291621ccab748f9d16809
--- /dev/null
+++ b/lib/public/appframework/iapi.php
@@ -0,0 +1,238 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework;
+
+
+/**
+ * A few very basic and frequently used API functions are combined in here
+ */
+interface IApi {
+
+	/**
+	 * used to return the appname of the set application
+	 * @return string the name of your application
+	 */
+	function getAppName();
+
+
+	/**
+	 * Creates a new navigation entry
+	 * @param array $entry containing: id, name, order, icon and href key
+	 */
+	function addNavigationEntry(array $entry);
+
+
+	/**
+	 * Gets the userid of the current user
+	 * @return string the user id of the current user
+	 */
+	function getUserId();
+
+
+	/**
+	 * Sets the current navigation entry to the currently running app
+	 */
+	function activateNavigationEntry();
+
+
+	/**
+	 * Adds a new javascript file
+	 * @param string $scriptName the name of the javascript in js/ without the suffix
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function addScript($scriptName, $appName = null);
+
+
+	/**
+	 * Adds a new css file
+	 * @param string $styleName the name of the css file in css/without the suffix
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function addStyle($styleName, $appName = null);
+
+
+	/**
+	 * shorthand for addScript for files in the 3rdparty directory
+	 * @param string $name the name of the file without the suffix
+	 */
+	function add3rdPartyScript($name);
+
+
+	/**
+	 * shorthand for addStyle for files in the 3rdparty directory
+	 * @param string $name the name of the file without the suffix
+	 */
+	function add3rdPartyStyle($name);
+
+	/**
+	 * Looks up a system-wide defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	function getSystemValue($key);
+
+	/**
+	 * Sets a new system-wide value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	function setSystemValue($key, $value);
+
+
+	/**
+	 * Looks up an app-specific defined value
+	 * @param string $key the key of the value, under which it was saved
+	 * @return string the saved value
+	 */
+	function getAppValue($key, $appName = null);
+
+
+	/**
+	 * Writes a new app-specific value
+	 * @param string $key the key of the value, under which will be saved
+	 * @param string $value the value that should be stored
+	 */
+	function setAppValue($key, $value, $appName = null);
+
+
+	/**
+	 * Shortcut for setting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $value the value that you want to store
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	function setUserValue($key, $value, $userId = null);
+
+
+	/**
+	 * Shortcut for getting a user defined value
+	 * @param string $key the key under which the value is being stored
+	 * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+	 */
+	function getUserValue($key, $userId = null);
+
+	/**
+	 * Returns the translation object
+	 * @return \OC_L10N the translation object
+	 *
+	 * FIXME: returns private object / should be retrieved from teh ServerContainer
+	 */
+	function getTrans();
+
+
+	/**
+	 * Used to abstract the owncloud database access away
+	 * @param string $sql the sql query with ? placeholder for params
+	 * @param int $limit the maximum number of rows
+	 * @param int $offset from which row we want to start
+	 * @return \OCP\DB a query object
+	 *
+	 * FIXME: returns non public interface / object
+	 */
+	function prepareQuery($sql, $limit=null, $offset=null);
+
+
+	/**
+	 * Used to get the id of the just inserted element
+	 * @param string $tableName the name of the table where we inserted the item
+	 * @return int the id of the inserted element
+	 *
+	 * FIXME: move to db object
+	 */
+	function getInsertId($tableName);
+
+
+	/**
+	 * Returns the URL for a route
+	 * @param string $routeName the name of the route
+	 * @param array $arguments an array with arguments which will be filled into the url
+	 * @return string the url
+	 */
+	function linkToRoute($routeName, $arguments=array());
+
+
+	/**
+	 * Returns an URL for an image or file
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function linkTo($file, $appName=null);
+
+
+	/**
+	 * Returns the link to an image, like link to but only with prepending img/
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 */
+	function imagePath($file, $appName = null);
+
+
+	/**
+	 * Makes an URL absolute
+	 * @param string $url the url
+	 * @return string the absolute url
+	 *
+	 * FIXME: function should live in Request / Response
+	 */
+	function getAbsoluteURL($url);
+
+
+	/**
+	 * links to a file
+	 * @param string $file the name of the file
+	 * @param string $appName the name of the app, defaults to the current one
+	 * @deprecated replaced with linkToRoute()
+	 * @return string the url
+	 */
+	function linkToAbsolute($file, $appName = null);
+
+
+	/**
+	 * Checks if an app is enabled
+	 * @param string $appName the name of an app
+	 * @return bool true if app is enabled
+	 */
+	public function isAppEnabled($appName);
+
+
+	/**
+	 * Writes a function into the error log
+	 * @param string $msg the error message to be logged
+	 * @param int $level the error level
+	 *
+	 * FIXME: add logger instance to ServerContainer
+	 */
+	function log($msg, $level = null);
+
+
+	/**
+	 * Returns a template
+	 * @param string $templateName the name of the template
+	 * @param string $renderAs how it should be rendered
+	 * @param string $appName the name of the app
+	 * @return \OCP\Template a new template
+	 */
+	function getTemplate($templateName, $renderAs='user', $appName=null);
+}
diff --git a/lib/public/appframework/iappcontainer.php b/lib/public/appframework/iappcontainer.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2faea07b953974759b0e906f5aacc8939beb0b5
--- /dev/null
+++ b/lib/public/appframework/iappcontainer.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace OCP\AppFramework;
+
+use OCP\AppFramework\IApi;
+use OCP\Core\IContainer;
+
+/**
+ * Class IAppContainer
+ * @package OCP\AppFramework
+ *
+ * This container interface provides short cuts for app developers to access predefined app service.
+ */
+interface IAppContainer extends IContainer{
+
+	/**
+	 * @return IApi
+	 */
+	function getCoreApi();
+
+	/**
+	 * @return \OCP\Core\IServerContainer
+	 */
+	function getServer();
+}