diff --git a/cook.sh b/cook.sh
index 41d3b76c1a07c898ed66499b2c1163bb51981996..9d9dfb05227bf26f7321f92c0358825720fb916c 100755
--- a/cook.sh
+++ b/cook.sh
@@ -22,6 +22,9 @@ function usage {
     echo "  distclean" >&2
     echo "  build" >&2
     echo "  clean" >&2
+    echo "  diff" >&2
+    echo "  diff_origin" >&2
+    echo "  diff_upstream" >&2
     echo "  fetch" >&2
     echo "  unfetch" >&2
     echo "  prepare" >&2
@@ -31,6 +34,7 @@ function usage {
     echo "  stage" >&2
     echo "  unstage" >&2
     echo "  status" >&2
+    echo "  status_origin" >&2
     echo "  status_upstream" >&2
     echo "  tar" >&2
     echo "  untar" >&2
@@ -122,6 +126,17 @@ function op {
                 git -C source diff --name-status
             fi
             ;;
+        status_origin)
+            if [ -n "$GIT" ]
+            then
+                if [ -n "$BRANCH" ]
+                then
+                    git -C source diff --name-status "origin/$BRANCH"
+                else
+                    git -C source diff --name-status "origin/master"
+                fi
+            fi
+            ;;
         status_upstream)
             if [ -n "$GIT_UPSTREAM" ]
             then
@@ -133,6 +148,34 @@ function op {
                 fi
             fi
             ;;
+        diff)
+            if [ -n "$GIT" ]
+            then
+                git -C source diff
+            fi
+            ;;
+        diff_origin)
+            if [ -n "$GIT" ]
+            then
+                if [ -n "$BRANCH" ]
+                then
+                    git -C source diff "origin/$BRANCH"
+                else
+                    git -C source diff "origin/master"
+                fi
+            fi
+            ;;
+        diff_upstream)
+            if [ -n "$GIT_UPSTREAM" ]
+            then
+                if [ -n "$BRANCH" ]
+                then
+                    git -C source diff "upstream/$BRANCH"
+                else
+                    git -C source diff "upstream/master"
+                fi
+            fi
+            ;;
         update)
             pushd source > /dev/null
             skip=0
diff --git a/status_origin.sh b/status_origin.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cf3e1ab43c9a4659d999778628788cbddd9876b5
--- /dev/null
+++ b/status_origin.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+set -e
+
+source config.sh
+
+if [ $# = 0 ]
+then
+    recipes="$(ls -1 recipes)"
+else
+    recipes="$@"
+fi
+
+for recipe in $recipes
+do
+    if [ -d "recipes/$recipe/source" ]
+    then
+        status="$(COOK_QUIET=1 ./cook.sh "$recipe" status_origin)"
+
+        if [ -n "$status" ]
+        then
+            echo -e "\e[1m$recipe\e[0m\n$status"
+        fi
+    fi
+done