diff --git a/Makefile.in b/Makefile.in
index b1522d6c42b6f284600e25c6fc738cbe01d0487f..56a3185ab48947db499de8160326f8ad656aeb69 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -5,6 +5,7 @@ SHELL = /bin/sh
 top_srcdir := `readlink -m @top_srcdir@`
 srcdir := `readlink -m @srcdir@`
 bld_dir:= $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+models_dir:= $(bld_dir)/models
 linux_version := '@linux_version@'
 VPATH=$(srcdir)
 
@@ -29,18 +30,18 @@ DEVFLAGS=@DEVFLAGS@
 %: clean-%
 
 	@# Set path variables so we don't need the whole path everywhere
-	$(eval model_bld_dir := $(bld_dir)/src/fe/$@/)
+	$(eval model_bld_dir := $(bld_dir)/models/$@/)
 	$(eval kern_bld_dir := $(model_bld_dir)/kernel_mod/)
 	$(eval us_bld_dir := $(model_bld_dir)/userspace/)
 	$(eval epics_bld_dir := $(model_bld_dir)/epics/)
 	
 
-	@mkdir -p src/epics/util src/fe src/epics/fmseq src/fe/$@/include
+	@mkdir -p src/epics/util $(models_dir) src/epics/fmseq $(models_dir)/$@/include
 	@ln -fs $(srcdir)/src/epics/util/lib src/epics/util > /dev/null 2>&1 || /bin/true
 	@ln -fs $(srcdir)/src/epics/simLink src/epics > /dev/null 2>&1 || /bin/true
 	@ln -fs $(srcdir)/src/epics/util/Makefile.kernel src/epics/util > /dev/null 2>&1 || /bin/true
 	@ln -fs $(srcdir)/src/epics/util/Userspace_CMakeLists.cmake src/epics/util > /dev/null 2>&1
-	@cp $(srcdir)/support/symvers/ModuleIOP.symvers src/fe/
+	@cp $(srcdir)/support/symvers/ModuleIOP.symvers $(models_dir)/
 
 	@echo Parsing the model $@...
 	@make -C src/epics/util -sf Makefile $@ > $@.log 2>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
@@ -84,7 +85,7 @@ endif
 	@echo Build date `date` > $(epics_bld_dir)/target/src/build.txt
 	@echo Compiled on `hostname` >> $(epics_bld_dir)/target/src/build.txt
 	@echo RCG_LIB_PATH=${RCG_LIB_PATH} >> $(epics_bld_dir)/target/src/build.txt
-	@tar Ccf $(srcdir) - --exclude rcg.tar.gz --exclude $(epics_bld_dir)/target  . | gzip > $(epics_bld_dir)/target/src/rcg.tar.gz
+	@tar Ccf $(srcdir) - --exclude rcg.tar.gz --exclude $(epics_bld_dir)/target   . | gzip > $(epics_bld_dir)/target/src/rcg.tar.gz
 	@cp src/epics/util/sources.$@ $(epics_bld_dir)/target/src/src_locations.txt
 	@cp $@.log $(epics_bld_dir)/target/src
 	@cp $@_error.log $(epics_bld_dir)/target/src
@@ -116,7 +117,7 @@ reclean:
 clean-%:
 	@system=$(subst clean-,,$@); echo Cleaning $${system}...; \
         /bin/rm -rf target/$${system}epics build/$${system}epics; \
-        (make -siC src/fe/$${system}/Makefile clean 2>/dev/null); echo Done
+        (make -siC $(models_dir)/$${system}/Makefile clean 2>/dev/null); echo Done
 
 install-adclist-%:
 	@system=$(subst install-adclist-,,$@); $(srcdir)/install-adclist $${system} $(srcdir)
diff --git a/config/Makefile.linux b/config/Makefile.linux
index 77c726cd3d1163348e8ad613ff9bff425b677379..6bc08d3d3493d6717813d9aa516b876141f51496 100644
--- a/config/Makefile.linux
+++ b/config/Makefile.linux
@@ -210,7 +210,7 @@ $(EPICS_SRC_DIR)/%.i: $(EPICS_SRC_DIR)/%.st
 $(EPICS_SRC_DIR)/%.st: src/epics/fmseq/% $(FMSEQFILES)
 	(cd src/epics/fmseq; \
 	 cat $(notdir $<) | cpp $(CFLAGS) -  | grep -v ^# | $(if $(FMSEQ), $(FMSEQ), $(RCG_SRC_DIR)/src/epics/util/fmseq.pl) $(notdir $<) &&\
-	 mv $(notdir $<)_proc.h ../../fe/$(MODEL_NAME)/include/ &&\
+	 mv $(notdir $<)_proc.h ../../../models/$(MODEL_NAME)/include/ &&\
 	 mv $(notdir $<).* ../../../$(EPICS_SRC_DIR))
 
 
diff --git a/install b/install
index 99ee576660b9ffa00d26c73379100f67e21d31c0..f587c20d867212d29d22b089852e5b49cea7b614 100755
--- a/install
+++ b/install
@@ -10,8 +10,10 @@ else
     srcdir=$2
 fi
 
-MODEL_BUILD_DIR=src/fe/${system}
-MODEL_INC_DIR=src/fe/${system}/include
+MODEL_BUILD_DIR=models/${system}
+KERNEL_MOD_BUILD_DIR=${MODEL_BUILD_DIR}/kernel_mod/
+USERSPACE_BUILD_DIR=${MODEL_BUILD_DIR}/userspace/build/
+MODEL_INC_DIR=${MODEL_BUILD_DIR}/include
 EPICS_BUILD_DIR=${MODEL_BUILD_DIR}/epics/
 EPICS_TARGET_DIR=${EPICS_BUILD_DIR}/target/
 
@@ -102,11 +104,11 @@ echo "Installing RT components..."
 if test -e $TARGET/bin/${system}.ko; then
     mv -f $TARGET/bin/${system}.ko $TARGET/archive/${system}fe_${cur_date}.ko || exit 4
 fi
-if test -e src/fe/${system}/kernel_mod/${system}.ko; then
-    cp -fp src/fe/${system}/kernel_mod/${system}.ko $TARGET/bin/
+if test -e ${KERNEL_MOD_BUILD_DIR}/${system}.ko; then
+    cp -fp ${KERNEL_MOD_BUILD_DIR}/${system}.ko $TARGET/bin/
 fi
-if test -e src/fe/${system}_usp/${system}; then
-    cp -fp src/fe/${system}_usp/${system} $TARGET/bin/
+if test -e ${USERSPACE_BUILD_DIR}/${system}; then
+    cp -fp ${USERSPACE_BUILD_DIR}/${system} $TARGET/bin/
 fi
 if test -e $TARGET/bin/${system}; then
     echo  'taskset -c '$targetcpu $TARGET/bin/${system} '-m ' ${system} ' >  '$TARGET/logs/log.txt ' 2>& 1 &' > $TARGET/scripts/startup${ifo}usp
@@ -136,7 +138,7 @@ if [ x$gds_node != "x" ]; then
     ##########
 
     echo "Updating testpoint config file..."
-    if [[ $gds_node -lt 256 ]] && test -e src/fe/${system}/kernel_mod/${system}.ko; then
+    if [[ $gds_node -lt 256 ]] && test -e ${KERNEL_MOD_BUILD_DIR}/${system}.ko; then
       if test -e $RTCDS/target/gds/param/testpoint.par; then
         mv -f $RTCDS/target/gds/param/testpoint.par $RTCDS/target/gds/param/archive/testpoint_${cur_date}.par || exit 1
         testpoint_par_infname=$RTCDS/target/gds/param/archive/testpoint_${cur_date}.par
diff --git a/src/epics/util/feCodeGen.pl b/src/epics/util/feCodeGen.pl
index bbd27f73683e2f1ec7e77050b10c96eb1ca80d9c..17e5f6a81e578d552ff0513e08843f3d28ae2d66 100755
--- a/src/epics/util/feCodeGen.pl
+++ b/src/epics/util/feCodeGen.pl
@@ -107,7 +107,7 @@ print "Generating Firm Real-time code for patched vanilla Linux kernel\n";
 
 # Get MAX_DIO_MODULES allowed from header file.
 # This is used by Parser3.pm to stop compile if RCG limits exceeded.
-my $mdmStr = `grep "define MAX_DIO_MODULES" ../../include/drv/cdsHardware.h`;
+my $mdmStr = `grep "define MAX_DIO_MODULES" $rcg_src_dir/src/include/drv/cdsHardware.h`;
 my @mdmNum = ($mdmStr =~ m/(\d+)/);
 $maxDioMod = pop(@mdmNum);
 
@@ -187,7 +187,7 @@ $ifo_from_mdl_name = substr($skeleton, 0, 2);
 #//	- Create the paths for RCG output files. \n
 print "file out is $skeleton\n";
 
-$modelCodeFilepath = "../../fe/";
+$modelCodeFilepath = "../../../models/";
 $modelCodeFilepath .= $skeleton;
 
 $modelCodeKernDir = $modelCodeFilepath . "/kernel_mod/";
@@ -801,7 +801,7 @@ print "Found $dacCnt DAC modules part is $dacPartNum[0]\n";
 print "Found $boCnt Binary modules part is $boPartNum[0]\n";
 
 ($::maxAdcModules, $::maxDacModules) =
-	CDS::Util::findDefine("src/include/drv/cdsHardware.h",
+	CDS::Util::findDefine("src/include/drv/cdsHardware.h", #Rest of path added in function
 			"MAX_ADC_MODULES", "MAX_DAC_MODULES");
 
 die "***ERROR: Too many ADC modules (MAX = $::maxAdcModules): ADC defined = $adcCnt\n" if ($adcCnt > $::maxAdcModules);
diff --git a/src/epics/util/lib/Util.pm b/src/epics/util/lib/Util.pm
index 23d2f372af147533270899719dcc63549c0cf840..c3f6cd0c4c408d112690e381e0db4cb7e879c173 100644
--- a/src/epics/util/lib/Util.pm
+++ b/src/epics/util/lib/Util.pm
@@ -17,7 +17,7 @@ sub findDefine {
 
    # Determine allowed maximum IPC number
    open(CD2, "$::rcg_src_dir/" . $fname)
-	|| die "***ERROR: could not open $fname header\n";
+	|| die "***ERROR: could not open $::rcg_src_dir/$fname header\n";
    my @inData=<CD2>;
    close CD2;
    foreach $i (@defs) {
diff --git a/src/epics/util/lib/createEpicsMakefile.pm b/src/epics/util/lib/createEpicsMakefile.pm
index 9e32ead694d08953ad58324cc983723b8f038b41..4bc524aa4e55cd4bcacaf69793ca1d328e53f64f 100644
--- a/src/epics/util/lib/createEpicsMakefile.pm
+++ b/src/epics/util/lib/createEpicsMakefile.pm
@@ -13,7 +13,7 @@ my ($fileName) = @_;
 	print OUTME "# Define Epics system name. It should be unique.\n";
 	print OUTME "TARGET = $::skeleton";
 	print OUTME "epics\n";
-    print OUTME "EPICS_BUILD_DIR:= src/fe/$::skeleton/epics/\n";
+    print OUTME "EPICS_BUILD_DIR:= models/$::skeleton/epics/\n";
     print OUTME "\n";
 	print OUTME "SRC = \$(EPICS_BUILD_DIR)/src/";
 	print OUTME "$::skeleton";
diff --git a/src/epics/util/lib/createKernelMakefile.pm b/src/epics/util/lib/createKernelMakefile.pm
index 34bce7f82b52385d51e531e680968fd9cdff303b..0b303cee51e1793ac64a98ab1c33ad39e225c0ad 100644
--- a/src/epics/util/lib/createKernelMakefile.pm
+++ b/src/epics/util/lib/createKernelMakefile.pm
@@ -252,7 +252,7 @@ if ($::iopModel < 1) {   #************ SETUP FOR USER APP ***************
 
 
 print OUTM "EXTRA_CFLAGS += -DMODULE -DNO_RTL=1\n";
-print OUTM "EXTRA_CFLAGS += -I\$(SUBDIRS)/../../../fe/" . "\L$::skeleton" . "/include -I$::rcg_src_dir/src/include\n";
+print OUTM "EXTRA_CFLAGS += -I\$(SUBDIRS)/../../../models/" . "\L$::skeleton" . "/include -I$::rcg_src_dir/src/include\n";
 print OUTM "EXTRA_CFLAGS += -ffast-math -m80387 -msse2 -fno-builtin-sincos -mpreferred-stack-boundary=4\n";
 print OUTM "\n";
 close OUTM;
diff --git a/src/epics/util/lib/createUserMakefile.pm b/src/epics/util/lib/createUserMakefile.pm
index 6d89be4e8cb56f4e2924b0d45dc1d471a38565ab..747864c130cd2a61ced8800ecdbb12a23d578b9c 100644
--- a/src/epics/util/lib/createUserMakefile.pm
+++ b/src/epics/util/lib/createUserMakefile.pm
@@ -227,7 +227,7 @@ my ($makefileDir) = @_;
         }
     }
 
-    print OUTM "list(APPEND INC_DIRS \"\${PROJECT_SOURCE_DIR}/../../../fe/" . "\L$::skeleton" ."/include\"  \"$::rcg_src_dir\/src/include\")\n";
+    print OUTM "list(APPEND INC_DIRS \"\${PROJECT_SOURCE_DIR}/../../../models/" . "\L$::skeleton" ."/include\"  \"$::rcg_src_dir\/src/include\")\n";
 
     if ($::pciNet > 0 && $::virtualiop != 1) {
         print OUTM "list(APPEND LDFLAGS \"-L \${API_LIB_PATH} -lsisci \")\n";