diff --git a/src/mibew/.htaccess b/src/mibew/.htaccess
index 8a26f44f..1644ecb0 100644
--- a/src/mibew/.htaccess
+++ b/src/mibew/.htaccess
@@ -4,6 +4,11 @@ Options -Indexes
 # Follow symbolic links in the directory
 Options +FollowSymLinks
 
+<IfModule mod_negotiation.c>
+    # Forbid apache to guess file extensions
+    Options -MultiViews
+</IfModule>
+
 # Disable mod_security for Apache 1.x
 <IfModule mod_security.c>
     SecFilterEngine Off
@@ -51,3 +56,8 @@ Options +FollowSymLinks
 <FilesMatch "\.(yml|po|ini|handlebars|keep)$">
     Deny from all
 </FilesMatch>
+
+# Deny access to CLI cron worker from the outside
+<Files "cron.php">
+    Deny from all
+</Files>
diff --git a/src/mibew/cron.php b/src/mibew/cron.php
new file mode 100644
index 00000000..6793bcc8
--- /dev/null
+++ b/src/mibew/cron.php
@@ -0,0 +1,44 @@
+<?php
+/*
+ * This file is a part of Mibew Messenger.
+ *
+ * Copyright 2005-2015 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Initialize libraries
+require_once(dirname(__FILE__) . '/libs/init.php');
+
+use Mibew\Cache\CacheFactory;
+use Mibew\Maintenance\CronWorker;
+
+$configs = load_system_configs();
+
+// Prepare the cache. It is initialized in the same way as in index.php
+$cache_factory = new CacheFactory($configs['cache']);
+// For now directory for cache files cannot be changed via the configs file.
+$cache_factory->setOption('path', MIBEW_FS_ROOT . '/cache/stash');
+
+// Do the job.
+$worker = new CronWorker($cache_factory->getCache());
+$success = $worker->run();
+
+if ($success) {
+    echo("All cron jobs done\n");
+} else {
+    echo("Cron job failed. Here are the errors:\n");
+    foreach ($worker->getErrors() as $error) {
+        echo('    ' . $error . "\n");
+    }
+}