diff --git a/conf/type/__apt_ppa/explorer/state b/conf/type/__apt_ppa/explorer/state
index c50af3f0..8a5638b2 100755
--- a/conf/type/__apt_ppa/explorer/state
+++ b/conf/type/__apt_ppa/explorer/state
@@ -23,6 +23,11 @@
name="$__object_id"
-# FIXME: on first run check-apt-repository may not be installed
-check-apt-repository "$name" && echo enabled || echo disabled
+. /etc/lsb-release
+
+repo_name="${name#ppa:}"
+repo_file_name="$(echo "$repo_name" | sed "s:\/:\-:")-${DISTRIB_CODENAME}.list"
+
+[ -s "/etc/apt/sources.list.d/${repo_file_name}" ] \
+ && echo enabled || echo disabled
diff --git a/conf/type/__apt_ppa/files/check-apt-repository b/conf/type/__apt_ppa/files/check-apt-repository
deleted file mode 100755
index 4f4252c1..00000000
--- a/conf/type/__apt_ppa/files/check-apt-repository
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-#
-# Check if the given apt repository is installed or not.
-# Exit with:
-# 0: if it is installed
-# 1: if not
-# 2: on error
-#
-
-import sys
-from aptsources import distro, sourceslist
-from softwareproperties import ppa
-
-
-def is_repository_installed(repository):
- #print 'repository:', repository
- codename = distro.get_distro().codename
- #print 'codename:', codename
- (line, file) = ppa.expand_ppa_line(repository.strip(), codename)
- #print 'line:', line
- #print 'file:', file
- sources_list = sourceslist.SourcesList()
- source_entry = sourceslist.SourceEntry(line, file)
-
- if source_entry in sources_list:
- #print 'yes'
- return True
- else:
- #print 'no'
- return False
-
-if __name__ == '__main__':
- if (len(sys.argv) != 2):
- print 'Error: need a repository as argument'
- sys.exit(2)
- #repository = 'ppa:freenx-team'
- repository = sys.argv[1]
- if is_repository_installed(repository):
- sys.exit(0)
- else:
- sys.exit(1)
-
diff --git a/conf/type/__apt_ppa/manifest b/conf/type/__apt_ppa/manifest
index a97ced75..ad6ee614 100755
--- a/conf/type/__apt_ppa/manifest
+++ b/conf/type/__apt_ppa/manifest
@@ -18,16 +18,17 @@
# along with cdist. If not, see .
#
+name="$__object_id"
__package python-software-properties --state installed
-require="__package/python-software-properties" \
- __file /usr/local/bin/check-apt-repository \
- --source "$__type/files/check-apt-repository" \
- --mode 0755
-
require="__package/python-software-properties" \
__file /usr/local/bin/remove-apt-repository \
--source "$__type/files/remove-apt-repository" \
--mode 0755
+# FIXME: rewrite to use $__self once that exists
+# FIXME: only run if something changed. currently working arround this in
+# __apt_update_index/gencode-remote
+require="__apt_ppa/$__object_id" __apt_update_index
+
diff --git a/conf/type/__apt_update_index/gencode-remote b/conf/type/__apt_update_index/gencode-remote
new file mode 100755
index 00000000..ad2296df
--- /dev/null
+++ b/conf/type/__apt_update_index/gencode-remote
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see .
+#
+
+# BIG FAT FIXME: there must be a better way to do this!
+tmpdir=$(mktemp -d)
+cleanup() {
+ rm -rf "$tmpdir"
+}
+trap cleanup EXIT
+
+should="$tmpdir/should"
+is="$tmpdir/is"
+
+find "$__global/object/__apt_ppa" -path "*.cdist/parameter/state" | xargs cat > "$should"
+find "$__global/object/__apt_ppa" -path "*.cdist/explorer/state" | xargs cat > "$is"
+
+diff -ru "$is" "$should" || echo apt-get update
+
diff --git a/conf/type/__apt_update_index/man.text b/conf/type/__apt_update_index/man.text
new file mode 100644
index 00000000..dffba372
--- /dev/null
+++ b/conf/type/__apt_update_index/man.text
@@ -0,0 +1,44 @@
+cdist-type__apt_update_index(7)
+==========================
+Steven Armstrong
+
+
+NAME
+----
+cdist-type__apt_update_index - resynchronize the apt package index
+
+
+DESCRIPTION
+-----------
+This cdist type allows you to resynchronize the package index files from their
+sources. In other words, it runs `apt-get update`.
+
+FIXME: currently hard coded to work together with the __apt_ppa type
+
+
+REQUIRED PARAMETERS
+-------------------
+None.
+
+OPTIONAL PARAMETERS
+-------------------
+None.
+
+
+EXAMPLES
+--------
+
+--------------------------------------------------------------------------------
+__apt_update_index
+--------------------------------------------------------------------------------
+
+
+SEE ALSO
+--------
+- cdist-type(7)
+
+
+COPYING
+-------
+Copyright \(C) 2011 Steven Armstrong. Free use of this software is
+granted under the terms of the GNU General Public License version 3 (GPLv3).
diff --git a/conf/type/__apt_update_index/singleton b/conf/type/__apt_update_index/singleton
new file mode 100644
index 00000000..e69de29b