diff --git a/core/command/app/disable.php b/core/command/app/disable.php
new file mode 100644
index 0000000000000000000000000000000000000000..dcdee92349e26d9675783d99bee3d33e57c97b04
--- /dev/null
+++ b/core/command/app/disable.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\Command\App;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Disable extends Command {
+	protected function configure() {
+		$this
+			->setName('app:disable')
+			->setDescription('disable an app')
+			->addArgument(
+				'app-id',
+				InputArgument::REQUIRED,
+				'disable the specified app'
+			);
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output) {
+		$appId = $input->getArgument('app-id');
+		if (\OC_App::isEnabled($appId)) {
+			\OC_App::disable($appId);
+			$output->writeln($appId . ' disabled');
+		} else {
+			$output->writeln('No such app enabled: ' . $appId);
+		}
+	}
+}
diff --git a/core/command/app/enable.php b/core/command/app/enable.php
new file mode 100644
index 0000000000000000000000000000000000000000..f08546602ee0eab23ddbe97cb5ff1b28ec546a77
--- /dev/null
+++ b/core/command/app/enable.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\Command\App;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Enable extends Command {
+	protected function configure() {
+		$this
+			->setName('app:enable')
+			->setDescription('enable an app')
+			->addArgument(
+				'app-id',
+				InputArgument::REQUIRED,
+				'enable the specified app'
+			);
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output) {
+		$appId = $input->getArgument('app-id');
+		if (\OC_App::isEnabled($appId)) {
+			$output->writeln($appId . ' is already enabled');
+		} else if (!\OC_App::getAppPath($appId)) {
+			$output->writeln($appId . ' not found');
+		} else {
+			\OC_App::enable($appId);
+			$output->writeln($appId . ' enabled');
+		}
+	}
+}
diff --git a/core/command/app/listapps.php b/core/command/app/listapps.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc471c5453a4a42d5ee2fefb24dc983c09d19ae6
--- /dev/null
+++ b/core/command/app/listapps.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Core\Command\App;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ListApps extends Command {
+	protected function configure() {
+		$this
+			->setName('app:list')
+			->setDescription('List all available apps');
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output) {
+		$apps = \OC_App::getAllApps();
+		$enabledApps = array();
+		$disabledApps = array();
+
+		//sort enabled apps above disabled apps
+		foreach ($apps as $app) {
+			if (\OC_App::isEnabled($app)) {
+				$enabledApps[] = $app;
+			} else {
+				$disabledApps[] = $app;
+			}
+		}
+
+		sort($enabledApps);
+		sort($disabledApps);
+		$output->writeln('Enabled:');
+		foreach ($enabledApps as $app) {
+			$output->writeln(' - ' . $app);
+		}
+		$output->writeln('Disabled:');
+		foreach ($disabledApps as $app) {
+			$output->writeln(' - ' . $app);
+		}
+	}
+}
diff --git a/core/register_command.php b/core/register_command.php
index cfea1a6b8886442f50229c0370e1e19e1667fc8c..144dcd3dc5d5643bbf1e9f3ebd6b73b9bc7e6ddf 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -10,3 +10,6 @@
 $application->add(new OC\Core\Command\Status);
 $application->add(new OC\Core\Command\Db\GenerateChangeScript());
 $application->add(new OC\Core\Command\Upgrade());
+$application->add(new OC\Core\Command\App\Disable());
+$application->add(new OC\Core\Command\App\Enable());
+$application->add(new OC\Core\Command\App\ListApps());