diff --git a/TODO b/TODO
index 20cfaa7922ea9fdbb001a8265747345f3915fa27..3e76e00ce0bebbf07d5e90a0756195b3621a4c7a 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,6 @@
-Don't match dynamic ptr in bestguess.
+Convert DSN to REJECT unless sender gets SPF pass or best guess pass.  Make
+configurable by SPF result with NOTSPAM policy (reject or deliver without DSN).
+Maybe policy should be NODSN - still verify sender with CBV.
 
 When content filtering is not installed, reject BLACKLISTed MFROM
 immediately.  There is no use waiting until EOM.
@@ -224,3 +226,4 @@ data structure as autowhitelist.log.
 
 DONE Backup copies for outgoing/incoming mail.
 
+DONE Don't match dynamic ptr in bestguess.
diff --git a/milter.rc b/milter.rc
index 0840e431e90d34125570895d0ae8db287a8d9c51..3fad6c5b4c3093ceed122a6d7b2b34ed811a7951 100755
--- a/milter.rc
+++ b/milter.rc
@@ -23,7 +23,7 @@ pidof() {
 # Source function library.
 . /etc/rc.d/init.d/functions
 
-[ -x /var/log/milter/start.sh ] || exit 0
+[ -x /usr/lib/pymilter/start.sh ] || exit 0
 
 RETVAL=0
 prog="milter"
@@ -36,7 +36,7 @@ start() {
 		mkdir -p /var/run/milter
 		chown mail:mail /var/run/milter
 	fi
-	daemon --check milter --user mail /var/log/milter/start.sh milter bms
+	daemon --check milter --user mail /usr/lib/pymilter/start.sh milter bms
 	RETVAL=$?
 	echo
 	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/milter
diff --git a/milter.spec b/pymilter.spec
similarity index 93%
rename from milter.spec
rename to pymilter.spec
index a3eae8579d8b5092a3e0347224e56be17498f9eb..7783871fccd7d1523b064e9c272db61c636c47ff 100644
--- a/milter.spec
+++ b/pymilter.spec
@@ -1,8 +1,7 @@
-%define name pymilter
-%define version 0.8.8
+%define version 0.8.9
 %define release 1
 # what version of RH are we building for?
-%define redhat7 0
+%define redhat7 1
 
 # Options for Redhat version 6.x:
 # rpm -ba|--rebuild --define "rh7 1"
@@ -19,7 +18,7 @@
 %endif
 # RH9, other systems (single ps line per process)
 %ifos Linux
-%define python python
+%define python python2.4
 %else
 %define python python
 %endif
@@ -29,11 +28,17 @@
 %define libdir /usr/lib/pymilter
 %endif
 
-Summary: Python interface to sendmail milter API
-Name: %{name}
+# This spec file contains 2 noarch packages in addition to the pymilter
+# module.  To compile all three, use:
+# rpmbuild -ba --target=i386,noarch pymilter.spec
+
+%ifarch noarch
+Name: milter
+Group: Applications/System
+Summary:  BMS spam and reputation milter
 Version: %{version}
 Release: %{release}
-Source: %{name}-%{version}.tar.gz
+Source: pymilter-%{version}.tar.gz
 #Patch: %{name}-%{version}.patch
 License: GPL
 Group: Development/Libraries
@@ -42,22 +47,10 @@ Prefix: %{_prefix}
 Vendor: Stuart D. Gathman <stuart@bmsi.com>
 Packager: Stuart D. Gathman <stuart@bmsi.com>
 Url: http://www.bmsi.com/python/milter.html
-Requires: %{python} >= 2.4, sendmail >= 8.13
+Requires: %{python} >= 2.4, pyspf >= 2.0.4, pymilter
 %ifos Linux
 Requires: chkconfig
 %endif
-BuildRequires: %{python}-devel >= 2.4, sendmail-devel >= 8.13
-
-%description
-This is a python extension module to enable python scripts to
-attach to sendmail's libmilter functionality.  Additional python
-modules provide for navigating and modifying MIME parts, sending
-DSNs, and doing CBV.
-
-%package -n milter
-Group: Applications/System
-Summary:  BMS spam and reputation milter
-Requires: pyspf >= 2.0.4
 
 %description -n milter
 A complex but effective spam filtering, SPF checking, and reputation tracking
@@ -66,28 +59,18 @@ mail application.  It uses pydspam if installed for bayesian filtering.
 %package spf
 Group: Applications/System
 Summary:  BMS spam and reputation milter
-Requires: pyspf >= 2.0.4
+Requires: pyspf >= 2.0.4, pymilter
 
 %description spf
 A simple mail filter to add Received-SPF headers and reject forged mail.
 Rejection policy is configured via sendmail access file.
 
 %prep
-%setup
+%setup -n pymilter-%{version}
 #patch -p0 -b .bms
 
-%build
-%if %{redhat7}
-  LDFLAGS="-s"
-%else # Redhat builds debug packages after 7.3
-  LDFLAGS="-g"
-%endif
-env CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$LDFLAGS" %{python} setup.py build
-
 %install
 rm -rf $RPM_BUILD_ROOT
-%{python} setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
-grep '.pyc$' INSTALLED_FILES | sed -e 's/c$/o/' >>INSTALLED_FILES
 mkdir -p $RPM_BUILD_ROOT/var/log/milter
 mkdir -p $RPM_BUILD_ROOT/etc/mail
 mkdir $RPM_BUILD_ROOT/var/log/milter/save
@@ -198,16 +181,9 @@ if [ $1 = 0 ]; then
 fi
 %endif
 
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files -f INSTALLED_FILES
+%files 
 %defattr(-,root,root)
-%doc README HOWTO ChangeLog NEWS TODO CREDITS sample.py milter-template.py
 %config %{libdir}/start.sh
-
-%files -n milter
-%defattr(-,root,root)
 /etc/logrotate.d/milter
 /etc/cron.daily/milter
 %ifos aix4.1
@@ -219,7 +195,9 @@ rm -rf $RPM_BUILD_ROOT
 %dir /var/log/milter
 %dir /var/log/milter/save
 %config %{libdir}/bms.py
+%if !%{redhat7}
 %{libdir}/bms.py?
+%endif
 %config(noreplace) /var/log/milter/strike3.txt
 %config(noreplace) /var/log/milter/softfail.txt
 %config(noreplace) /var/log/milter/fail.txt
@@ -236,7 +214,62 @@ rm -rf $RPM_BUILD_ROOT
 %config(noreplace) /etc/mail/spfmilter.cfg
 /etc/rc.d/init.d/spfmilter
 
+%else # not noarch
+
+%define name pymilter
+Summary: Python interface to sendmail milter API
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Source: %{name}-%{version}.tar.gz
+#Patch: %{name}-%{version}.patch
+License: GPL
+Group: Development/Libraries
+BuildRoot: %{_tmppath}/%{name}-buildroot
+Prefix: %{_prefix}
+Vendor: Stuart D. Gathman <stuart@bmsi.com>
+Packager: Stuart D. Gathman <stuart@bmsi.com>
+Url: http://www.bmsi.com/python/milter.html
+Requires: %{python} >= 2.4, sendmail >= 8.13
+BuildRequires: %{python}-devel >= 2.4, sendmail-devel >= 8.13
+
+%description
+This is a python extension module to enable python scripts to
+attach to sendmail's libmilter functionality.  Additional python
+modules provide for navigating and modifying MIME parts, sending
+DSNs, and doing CBV.
+
+%prep
+%setup
+#patch -p0 -b .bms
+
+%build
+%if %{redhat7} 
+  LDFLAGS="-s"
+%else # Redhat builds debug packages after 7.3
+  LDFLAGS="-g"
+%endif
+env CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$LDFLAGS" %{python} setup.py build
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%{python} setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
+%if !%{redhat7}
+grep '.pyc$' INSTALLED_FILES | sed -e 's/c$/o/' >>INSTALLED_FILES
+%endif
+
+%files -f INSTALLED_FILES
+%defattr(-,root,root)
+%doc README HOWTO ChangeLog NEWS TODO CREDITS sample.py milter-template.py
+
+%endif # noarch
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
 %changelog
+* Mon Sep 24 2007 Stuart Gathman <stuart@bmsi.com> 0.8.9-1
+- Use %ifarch hack to build milter and milter-spf packages as noarch
 * Fri Jan 05 2007 Stuart Gathman <stuart@bmsi.com> 0.8.8-1
 - move AddrCache, parse_addr, iniplist to Milter package
 - move parse_header to Milter.utils
diff --git a/start.sh b/start.sh
index 49458408eb1917fc864ddab83597f99706ee30c6..0fd23ba5c5c309264a1180d19c239226525b2471 100755
--- a/start.sh
+++ b/start.sh
@@ -12,5 +12,5 @@ fi
 
 cd /var/log/milter
 exec >>${appname}.log 2>&1
-${python} ${appname}.py &
+${python} ${script}.py &
 echo $! >/var/run/milter/${appname}.pid