diff --git a/events.xml b/events.xml
index 863282f650c031b69128eba0817018e7926d6e13..a9edc9b86522e94889eabac705987239c7e1a8e0 100644
--- a/events.xml
+++ b/events.xml
@@ -3,4 +3,6 @@
     <event on="onAdminLoad" fire="\QUI\Cron\EventHandler::onAdminLoad"/>
     <event on="onAdminLoadFooter" fire="\QUI\Cron\EventHandler::adminLoadFooter"/>
     <event on="onPackageSetup" fire="\QUI\Cron\EventHandler::onPackageSetup"/>
+    <event on="onPackageInstall" fire="\QUI\Cron\EventHandler::onPackageInstall"/>
+    <event on="onCreateProject" fire="\QUI\Cron\EventHandler::onCreateProject"/>
 </events>
\ No newline at end of file
diff --git a/src/QUI/Cron/EventHandler.php b/src/QUI/Cron/EventHandler.php
index ef6f2fb8999cbff5f980f79883fe316bbea0814b..aeb8c5ded82b9fed5e83a845d57b9c1710b95337 100644
--- a/src/QUI/Cron/EventHandler.php
+++ b/src/QUI/Cron/EventHandler.php
@@ -80,6 +80,7 @@ class EventHandler
 
         if (!isset($result[0])) {
             self::sendAdminInfoCronError();
+
             return;
         }
 
@@ -129,4 +130,115 @@ class EventHandler
             QUI::getUserBySession()->getLocale()->get('quiqqer/cron', 'message.cron.admin.info.24h')
         );
     }
+
+
+    /**
+     * Event: onPackageInstall => Add default crons
+     */
+    public static function onPackageInstall()
+    {
+        self::createDefaultCrons();
+    }
+
+    /**
+     * Creates the default crons, if they do not exist yet
+     *
+     */
+    public static function createDefaultCrons()
+    {
+        $CronManager = new Manager();
+
+        $defaultCrons = array(
+            // Clear temp folder
+            "quiqqer/cron:0" => array(
+                "min"   => "0",
+                "hour"  => "0",
+                "day"   => "*",
+                "month" => "*",
+                "dow"   => "*"
+            ),
+            // Clear sessions
+            "quiqqer/cron:1" => array(
+                "min"   => "0",
+                "hour"  => "*",
+                "day"   => "*",
+                "month" => "*",
+                "dow"   => "*"
+            ),
+            // Process mail queue
+            "quiqqer/cron:6" => array(
+                "min"   => "*/5",
+                "hour"  => "0",
+                "day"   => "*",
+                "month" => "*",
+                "dow"   => "*"
+            )
+        );
+
+        // Parse the installed crons
+        $installedCrons = array();
+        foreach ($CronManager->getList() as $row) {
+            $installedCrons[] = strtolower(trim($row['exec']));
+        }
+
+
+        // add the simple default crons, if they dont exist yet
+        foreach ($defaultCrons as $identifier => $time) {
+            $data = $CronManager->getCronData($identifier);
+
+            $exec  = trim($data['exec']);
+            $title = trim($data['title']);
+
+            if (in_array(strtolower($exec), $installedCrons)) {
+                continue;
+            }
+
+            $CronManager->add($title, $time['min'], $time['hour'], $time['day'], $time['month'], $time['dow']);
+        }
+    }
+
+    /**
+     * Event: onCreateProject => Add the publish cron for this project
+     * @param QUI\Projects\Project $Project
+     */
+    public static function onCreateProject(QUI\Projects\Project $Project)
+    {
+        $CronManager     = new Manager();
+        $publishCronData = $CronManager->getCronData("quiqqer/cron:5");
+
+        $languages      = $Project->getLanguages();
+        $installedCrons = $CronManager->getList();
+
+        foreach ($languages as $lang) {
+            // Check that no cron with the same parameters exists yet
+            foreach ($installedCrons as $installedCronData) {
+                $installedParams  = json_decode($installedCronData['params'], true);
+                $installedProject = "";
+                $installedLang    = "";
+
+                foreach ($installedParams as $name => $value) {
+                    if ($name == "project") {
+                        $installedProject = strtolower(trim($value));
+                    }
+
+                    if ($name == "lang") {
+                        $installedLang = strtolower(trim($value));
+                    }
+                }
+
+                // Cron for this project & lang combination exists => skip
+                if ($installedProject == strtolower(trim($Project->getName())) &&
+                    $installedLang == strtolower(trim($lang))
+                ) {
+                    continue 2;
+                }
+            }
+
+            // Add the cron
+            $CronManager->add($publishCronData['title'], "0", "*", "*", "*", "*", array(
+                "project" => $Project->getName(),
+                "lang"    => $lang
+            ));
+        }
+    }
 }
diff --git a/src/QUI/Cron/Manager.php b/src/QUI/Cron/Manager.php
index 293b1e3b35a48fb9d4c703e9313af50b94db540c..9f66c7f0b9ecd7441201c2e9d7e2203d9343154e 100644
--- a/src/QUI/Cron/Manager.php
+++ b/src/QUI/Cron/Manager.php
@@ -362,15 +362,36 @@ class Manager
      * Return the data of a specific cron from the available cron list
      * This cron is not in the cron list
      *
-     * @param string $cron - Name of the Cron
-     *
+     * @param string $cron - Cron-Identifier (package/package:NO) or name of the Cron
      * @return array|false - Cron Data
      */
     public function getCronData($cron)
     {
         $availableCrons = $this->getAvailableCrons();
 
-        // check if cron is available
+        // cron by package Identifier package/package:NO
+        $cronParts = explode(':', $cron);
+
+        try {
+            $Package  = QUI::getPackage($cronParts[0]);
+            $cronFile = $Package->getXMLFile('cron.xml');
+
+            if ($Package->isQuiqqerPackage()
+                && $cronFile
+                && isset($cronParts[1])
+                && is_numeric($cronParts[1])
+            ) {
+                $cronNo   = (int)$cronParts[1];
+                $cronList = $this->getCronsFromFile($cronFile);
+
+                if (isset($cronList[$cronNo])) {
+                    return $cronList[$cronNo];
+                }
+            }
+        } catch (QUI\Exception $Exception) {
+        }
+
+        // search cron via title
         foreach ($availableCrons as $entry) {
             if ($entry['title'] == $cron) {
                 return $entry;