Hi and thank you for your assistance ahead of time.
I’ve been unable to get AMD Freesync enabled in openSUSE Tumbleweed KDE Plasma 5 desktop. I’m using a Radeon VII AMD GPU, Display Port connection on an Optix MSI MAG321CQR monitor with FreeSync.
Here are the steps I’ve tried based on Phoronix guide and other forums:
In path: /etc/X11/xorg.conf.d
created r.conf
(also tried 20-amdgpu.conf
) and included the following:
`Section "OutputClass"
Identifier "AMDgpu"
MatchDriver "amdgpu"
Driver "amdgpu"
Option "DRI" "3"
Option "VariableRefresh" "true"
EndSection`
As I understand it. ‘VariableRefresh true’ is the flag that enables FreeSync.
After reboot the output of xrandr --prop
still show
‘TearFree: auto
supported: off, on, auto’
‘vrr_capable: 0
range: (0, 1)’
When FreeSync is enabled vrr_capable
is supposed to turn from 0 to 1. So it would read ‘vrr_capable: 1’.
Does anyone have experience enabling FreeSync on openSUSE and what options (even enabling manually) I can try?
Thank you again!
Hi
What amdgpu kernel module options (parameters) are set?
systool -vm amdgpu
Thank you for your reply. Here is the output of systool -vm amdgpu
Module = "amdgpu"
Attributes:
coresize = "3915776"
initsize = "0"
initstate = "live"
refcnt = "48"
srcversion = "FEF074BD5A8DE00489EB2B2"
taint = ""
uevent = <store method only>
Parameters:
aspm = "-1"
audio = "-1"
bapm = "-1"
benchmark = "0"
cg_mask = "4294967295"
cik_support = "0"
cntl_sb_buf_per_se = "0"
compute_multipipe = "-1"
cwsr_enable = "1"
dc = "-1"
dcfeaturemask = "0"
debug_largebar = "0"
deep_color = "0"
disable_cu = "(null)"
disp_priority = "0"
dpm = "-1"
emu_mode = "0"
exp_hw_support = "0"
fw_load_type = "-1"
gartsize = "4294967295"
gpu_recovery = "-1"
gttsize = "-1"
halt_if_hws_hang = "0"
hw_i2c = "0"
hws_max_conc_proc = "8"
ignore_crat = "0"
ip_block_mask = "4294967295"
job_hang_limit = "0"
lbpw = "-1"
lockup_timeout = "10000"
max_num_of_queues_per_device= "4096"
moverate = "-1"
msi = "-1"
ngg = "0"
noretry = "0"
param_buf_per_se = "0"
pcie_gen2 = "-1"
pcie_gen_cap = "0"
pcie_lane_cap = "0"
pg_mask = "4294967295"
pos_buf_per_se = "0"
ppfeaturemask = "4294787071"
prim_buf_per_se = "0"
runpm = "-1"
sched_hw_submission = "2"
sched_jobs = "32"
sched_policy = "0"
sdma_phase_quantum = "32"
send_sigterm = "0"
si_support = "0"
smu_memory_pool_size= "0"
test = "0"
virtual_display = "(null)"
vis_vramlimit = "0"
vm_block_size = "-1"
vm_debug = "0"
vm_fault_stop = "0"
vm_fragment_size = "-1"
vm_size = "-1"
vm_update_mode = "-1"
vram_page_split = "512"
vramlimit = "0"
Sections:
.altinstr_replacement= "0xffffffffc08b7dc8"
.altinstructions = "0xffffffffc09eecf7"
.bss = "0xffffffffc0a10280"
.data..read_mostly = "0xffffffffc0a0fed0"
.data.once = "0xffffffffc0a0ec48"
.data = "0xffffffffc09f9000"
.exit.text = "0xffffffffc08b798a"
.gnu.linkonce.this_module= "0xffffffffc0a0ff00"
.init.text = "0xffffffffc0a94000"
.note.Linux = "0xffffffffc08b8024"
.note.gnu.build-id = "0xffffffffc08b8000"
.orc_unwind = "0xffffffffc09992d0"
.orc_unwind_ip = "0xffffffffc09612a8"
.parainstructions = "0xffffffffc09ee040"
.ref.data = "0xffffffffc0a0f060"
.rodata.cst4 = "0xffffffffc09eed7c"
.rodata.cst8 = "0xffffffffc09eeef0"
.rodata = "0xffffffffc08b8040"
.rodata.str1.1 = "0xffffffffc0956554"
.rodata.str1.8 = "0xffffffffc092a980"
.smp_locks = "0xffffffffc09ed30c"
.strtab = "0xffffffffc0ad9d18"
.symtab = "0xffffffffc0a95000"
.text..refcount = "0xffffffffc08b79aa"
.text = "0xffffffffc06d7000"
.text.unlikely = "0xffffffffc08a5ad1"
__bpf_raw_tp_map = "0xffffffffc0a0ec60"
__bug_table = "0xffffffffc09fd804"
__ex_table = "0xffffffffc09ed730"
__jump_table = "0xffffffffc09ef000"
__mcount_loc = "0xffffffffc091f3bd"
__param = "0xffffffffc09608f8"
__tracepoints_ptrs = "0xffffffffc09eea1c"
__tracepoints_strings= "0xffffffffc09eea80"
__tracepoints = "0xffffffffc0a0f8a0"
__verbose = "0xffffffffc0a00b68"
_ftrace_events = "0xffffffffc0a0ef80"
Hi
Can you enable the ngg option (next generation graphics) by editing the grub option and add;
amdgpu.ngg=1
Or can add via YaST bootloader kernel options, once booted check the output of the command again and run your other tests/checks.
malcolmlewis:
Hi
Can you enable the ngg option (next generation graphics) by editing the grub option and add;
amdgpu.ngg=1
Or can add via YaST bootloader kernel options, once booted check the output of the command again and run your other tests/checks.
Ok I added it via YaST bootloader kernel options. Rebooted. Here is the output:
xrandr --prop
Screen 0: minimum 320 x 200, current 4480 x 1440, maximum 16384 x 16384
DisplayPort-0 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 698mm x 393mm
EDID:
00ffffffffffff003669621401000000
071d0104a54627783b8e05ad4f33b026
0d5054afcf00818081bc9500953cb300
b33cd1fcd1c059e7006aa0a067501520
3500ba892100001a565e00a0a0a02950
30403500ba892100001a000000fc004d
5349204d4147333231435152000000ff
004b41334830373930373130303201b7
02033571510102031112130f1d1e0e90
1f044b4c051423091707830100006503
0c00100067d85dc401788800681a0000
01013090006fc200a0a0a05550302035
0055502100001a565e00a0a0a0295030
203500b1892100001a00000000000000
00000000000000000000000000000000
000000000000000000000000000000f4
GAMMA_LUT_SIZE: 4096
range: (0, -1)
DEGAMMA_LUT_SIZE: 4096
range: (0, -1)
GAMMA_LUT: 0
range: (0, 65535)
CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1
DEGAMMA_LUT: 0
range: (0, 65535)
TearFree: auto
supported: off, on, auto
vrr_capable: 0
range: (0, 1)
max bpc: 8
range: (8, 16)
underscan vborder: 0
range: (0, 128)
underscan hborder: 0
range: (0, 128)
underscan: off
supported: off, on, auto
scaling mode: None
supported: None, Full, Center, Full aspect
link-status: Good
supported: Good, Bad
CONNECTOR_ID: 59
supported: 59
non-desktop: 0
range: (0, 1)
2560x1440 143.97*+ 120.00 59.95 59.95
1920x1200 143.97
1920x1080 119.96 60.00 60.00 50.00 59.94
1600x1200 143.97
1680x1050 119.95 59.95
1280x1024 119.96 75.02 60.02
1440x900 119.98 59.89
1280x800 143.97
1280x720 60.00 50.00 59.94
1440x576 50.00
1024x768 75.03 70.07 60.00
1440x480 60.00 59.94
800x600 72.19 75.00 60.32 56.25
720x576 50.00
720x480 60.00 59.94
640x480 75.00 72.81 60.00 59.94
720x400 70.08
DisplayPort-1 disconnected (normal left inverted right x axis y axis)
GAMMA_LUT_SIZE: 4096
range: (0, -1)
DEGAMMA_LUT_SIZE: 4096
range: (0, -1)
GAMMA_LUT: 0
range: (0, 65535)
CTM: 0
DEGAMMA_LUT: 0
range: (0, 65535)
TearFree: auto
supported: off, on, auto
vrr_capable: 0
range: (0, 1)
max bpc: 8
range: (8, 16)
underscan vborder: 0
range: (0, 128)
underscan hborder: 0
range: (0, 128)
underscan: off
supported: off, on, auto
scaling mode: None
supported: None, Full, Center, Full aspect
link-status: Good
supported: Good, Bad
CONNECTOR_ID: 63
supported: 63
non-desktop: 0
range: (0, 1)
And SysTool output:
Module = "amdgpu"
Attributes:
coresize = "3915776"
initsize = "0"
initstate = "live"
refcnt = "35"
srcversion = "FEF074BD5A8DE00489EB2B2"
taint = ""
uevent = <store method only>
Parameters:
aspm = "-1"
audio = "-1"
bapm = "-1"
benchmark = "0"
cg_mask = "4294967295"
cik_support = "0"
cntl_sb_buf_per_se = "0"
compute_multipipe = "-1"
cwsr_enable = "1"
dc = "-1"
dcfeaturemask = "0"
debug_largebar = "0"
deep_color = "0"
disable_cu = "(null)"
disp_priority = "0"
dpm = "-1"
emu_mode = "0"
exp_hw_support = "0"
fw_load_type = "-1"
gartsize = "4294967295"
gpu_recovery = "-1"
gttsize = "-1"
halt_if_hws_hang = "0"
hw_i2c = "0"
hws_max_conc_proc = "8"
ignore_crat = "0"
ip_block_mask = "4294967295"
job_hang_limit = "0"
lbpw = "-1"
lockup_timeout = "10000"
max_num_of_queues_per_device= "4096"
moverate = "-1"
msi = "-1"
ngg = "1"
noretry = "0"
param_buf_per_se = "0"
pcie_gen2 = "-1"
pcie_gen_cap = "0"
pcie_lane_cap = "0"
pg_mask = "4294967295"
pos_buf_per_se = "0"
ppfeaturemask = "4294787071"
prim_buf_per_se = "0"
runpm = "-1"
sched_hw_submission = "2"
sched_jobs = "32"
sched_policy = "0"
sdma_phase_quantum = "32"
send_sigterm = "0"
si_support = "0"
smu_memory_pool_size= "0"
test = "0"
virtual_display = "(null)"
vis_vramlimit = "0"
vm_block_size = "-1"
vm_debug = "0"
vm_fault_stop = "0"
vm_fragment_size = "-1"
vm_size = "-1"
vm_update_mode = "-1"
vram_page_split = "512"
vramlimit = "0"
Sections:
.altinstr_replacement= "0xffffffffc0648dc8"
.altinstructions = "0xffffffffc077fcf7"
.bss = "0xffffffffc07a1280"
.data..read_mostly = "0xffffffffc07a0ed0"
.data.once = "0xffffffffc079fc48"
.data = "0xffffffffc078a000"
.exit.text = "0xffffffffc064898a"
.gnu.linkonce.this_module= "0xffffffffc07a0f00"
.init.text = "0xffffffffc0825000"
.note.Linux = "0xffffffffc0649024"
.note.gnu.build-id = "0xffffffffc0649000"
.orc_unwind = "0xffffffffc072a2d0"
.orc_unwind_ip = "0xffffffffc06f22a8"
.parainstructions = "0xffffffffc077f040"
.ref.data = "0xffffffffc07a0060"
.rodata.cst4 = "0xffffffffc077fd7c"
.rodata.cst8 = "0xffffffffc077fef0"
.rodata = "0xffffffffc0649040"
.rodata.str1.1 = "0xffffffffc06e7554"
.rodata.str1.8 = "0xffffffffc06bb980"
.smp_locks = "0xffffffffc077e30c"
.strtab = "0xffffffffc086ad18"
.symtab = "0xffffffffc0826000"
.text..refcount = "0xffffffffc06489aa"
.text = "0xffffffffc0468000"
.text.unlikely = "0xffffffffc0636ad1"
__bpf_raw_tp_map = "0xffffffffc079fc60"
__bug_table = "0xffffffffc078e804"
__ex_table = "0xffffffffc077e730"
__jump_table = "0xffffffffc0780000"
__mcount_loc = "0xffffffffc06b03bd"
__param = "0xffffffffc06f18f8"
__tracepoints_ptrs = "0xffffffffc077fa1c"
__tracepoints_strings= "0xffffffffc077fa80"
__tracepoints = "0xffffffffc07a08a0"
__verbose = "0xffffffffc0791b68"
_ftrace_events = "0xffffffffc079ff80"
Hi
Can you check your Xorg log that it doesn’t error?
For example;
cat .local/share/xorg/Xorg.0.log |grep VariableRefresh
10.099] (**) AMDGPU(0): Option "VariableRefresh" "true"
10.488] (**) AMDGPU(0): VariableRefresh: enabled
10.491] (**) AMDGPU(G0): Option "VariableRefresh" "true"
or
less .local/share/xorg/Xorg.0.log
I don’t have a FreeSync ready monitor here…
If all drivers seem ok, then maybe something to tweak on the monitor side?
malcolmlewis:
Hi
Can you check your Xorg log that it doesn’t error?
For example;
cat .local/share/xorg/Xorg.0.log |grep VariableRefresh
10.099] (**) AMDGPU(0): Option "VariableRefresh" "true"
10.488] (**) AMDGPU(0): VariableRefresh: enabled
10.491] (**) AMDGPU(G0): Option "VariableRefresh" "true"
or
less .local/share/xorg/Xorg.0.log
I don’t have a FreeSync ready monitor here…
If all drivers seem ok, then maybe something to tweak on the monitor side?
This is interesting when I run that command I get:
cat .local/share/xorg/Xorg.0.log |grep VariableRefresh
148.382] (==) AMDGPU(0): VariableRefresh: disabled
Hi
You should already have a 10-amdgpu.conf?
Here is mine;
cat /etc/X11/xorg.conf.d/10-amdgpu.conf
Section "OutputClass"
Identifier "AMDgpu"
MatchDriver "amdgpu"
Driver "amdgpu"
Option "DRI" "3"
Option "VariableRefresh" "true"
EndSection
malcolmlewis:
Hi
You should already have a 10-amdgpu.conf?
Here is mine;
cat /etc/X11/xorg.conf.d/10-amdgpu.conf
Section "OutputClass"
Identifier "AMDgpu"
MatchDriver "amdgpu"
Driver "amdgpu"
Option "DRI" "3"
Option "VariableRefresh" "true"
EndSection
I copied your config into 10-amdgpu.conf. I now get a read out when I use either command, however, after reboot xrandr --prop is still showing vrr_capable 0. I checked the monitor and made sure FreeSync is switched to on. I did see these errors in the Xorg.0.log below:
less ~/.local/share/xorg/Xorg.0.log | grep error
(WW) warning, (EE) error , (NI) not implemented, (??) unknown.
193.950] (WW) xf86CloseConsole: KDSETMODE failed: Input/output error
193.950] (WW) xf86CloseConsole: VT_GETMODE failed: Input/output error
193.951] (WW) xf86CloseConsole: VT_ACTIVATE failed: Input/output error
dasgeek:
I copied your config into 10-amdgpu.conf. I now get a read out when I use either command, however, after reboot xrandr --prop is still showing vrr_capable 0. I checked the monitor and made sure FreeSync is switched to on. I did see these errors in the Xorg.0.log below:
less ~/.local/share/xorg/Xorg.0.log | grep error
(WW) warning, (EE) error , (NI) not implemented, (??) unknown.
193.950] (WW) xf86CloseConsole: KDSETMODE failed: Input/output error
193.950] (WW) xf86CloseConsole: VT_GETMODE failed: Input/output error
193.951] (WW) xf86CloseConsole: VT_ACTIVATE failed: Input/output error
Hi
So you get VariableRefresh enabled now? So are you running wayland or Xorg? I’m assuming Plasma DE?
echo $XDG_SESSION_TYPE
Hi
Also can you show the output from;
/sbin/lspci -nnk | egrep -A3 "VGA|Display|3D"
I’m using KDE and the X11 session.
echo $XDG_SESSION_TYPE
x11
/sbin/lspci -nnk | egrep -A3 “VGA|Display|3D”
1e:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Vega 20 [Radeon VII] [1002:66af] (rev c1)
Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:081e]
Kernel driver in use: amdgpu
Kernel modules: amdgpu
It’s still not working but I appreciate your sticking with me here.
Hi
Have a read here;
https://www.amd.com/en/support/kb/faq/gpu-754
Since there is no freesync output, try substituting with vrr_capable, but not sure it counts as I can set it…
DISPLAY=:0 xrandr --output eDP --set "vrr_capable" 1
eDP connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
_MUTTER_PRESENTATION_OUTPUT: 0
EDID:
00ffffffffffff000daec61500000000
241901049522137802c3c59155549428
24505400000001010101010101010101
010101010101da1d56e250002030442d
470058c11000001ae71356e250002030
442d470058c11000001a000000000000
00000000000000000000000000000002
000c42ff0c3c6e0f0e1a73000000004e
GAMMA_LUT_SIZE: 4096
range: (0, -1)
DEGAMMA_LUT_SIZE: 4096
range: (0, -1)
GAMMA_LUT: 0
range: (0, 65535)
CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1
DEGAMMA_LUT: 0
range: (0, 65535)
TearFree: auto
supported: off, on, auto
vrr_capable: 1
range: (0, 1)
max bpc: 8
range: (8, 16)
underscan vborder: 0
range: (0, 128)
underscan hborder: 0
range: (0, 128)
underscan: off
supported: off, on, auto
scaling mode: None
supported: None, Full, Center, Full aspect
link-status: Good
supported: Good, Bad
CONNECTOR_ID: 51
supported: 51
non-desktop: 0
range: (0, 1)
1366x768 60.00*+ 40.00
1280x720 60.00
1024x768 60.00
800x600 60.00
640x480 60.00
HDMI-A-0 disconnected (normal left inverted right x axis y axis)
_MUTTER_PRESENTATION_OUTPUT: 0
GAMMA_LUT_SIZE: 4096
range: (0, -1)
DEGAMMA_LUT_SIZE: 4096
range: (0, -1)
GAMMA_LUT: 0
range: (0, 65535)
CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1
DEGAMMA_LUT: 0
range: (0, 65535)
TearFree: auto
supported: off, on, auto
vrr_capable: 0
range: (0, 1)
max bpc: 8
range: (8, 16)
underscan vborder: 0
range: (0, 128)
underscan hborder: 0
range: (0, 128)
underscan: off
supported: off, on, auto
scaling mode: None
supported: None, Full, Center, Full aspect
link-status: Good
supported: Good, Bad
CONNECTOR_ID: 55
supported: 55
non-desktop: 0
range: (0, 1)
malcolmlewis:
Hi
Have a read here;
https://www.amd.com/en/support/kb/faq/gpu-754
Since there is no freesync output, try substituting with vrr_capable, but not sure it counts as I can set it…
DISPLAY=:0 xrandr --output eDP --set "vrr_capable" 1
eDP connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
_MUTTER_PRESENTATION_OUTPUT: 0
EDID:
00ffffffffffff000daec61500000000
241901049522137802c3c59155549428
24505400000001010101010101010101
010101010101da1d56e250002030442d
470058c11000001ae71356e250002030
442d470058c11000001a000000000000
00000000000000000000000000000002
000c42ff0c3c6e0f0e1a73000000004e
GAMMA_LUT_SIZE: 4096
range: (0, -1)
DEGAMMA_LUT_SIZE: 4096
range: (0, -1)
GAMMA_LUT: 0
range: (0, 65535)
CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1
DEGAMMA_LUT: 0
range: (0, 65535)
TearFree: auto
supported: off, on, auto
vrr_capable: 1
range: (0, 1)
max bpc: 8
range: (8, 16)
underscan vborder: 0
range: (0, 128)
underscan hborder: 0
range: (0, 128)
underscan: off
supported: off, on, auto
scaling mode: None
supported: None, Full, Center, Full aspect
link-status: Good
supported: Good, Bad
CONNECTOR_ID: 51
supported: 51
non-desktop: 0
range: (0, 1)
1366x768 60.00*+ 40.00
1280x720 60.00
1024x768 60.00
800x600 60.00
640x480 60.00
HDMI-A-0 disconnected (normal left inverted right x axis y axis)
_MUTTER_PRESENTATION_OUTPUT: 0
GAMMA_LUT_SIZE: 4096
range: (0, -1)
DEGAMMA_LUT_SIZE: 4096
range: (0, -1)
GAMMA_LUT: 0
range: (0, 65535)
CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1
DEGAMMA_LUT: 0
range: (0, 65535)
TearFree: auto
supported: off, on, auto
vrr_capable: 0
range: (0, 1)
max bpc: 8
range: (8, 16)
underscan vborder: 0
range: (0, 128)
underscan hborder: 0
range: (0, 128)
underscan: off
supported: off, on, auto
scaling mode: None
supported: None, Full, Center, Full aspect
link-status: Good
supported: Good, Bad
CONNECTOR_ID: 55
supported: 55
non-desktop: 0
range: (0, 1)
This is the message when I try to set it manually:
DISPLAY=:0 xrandr --output eDP --set "vrr_capable" 1
warning: output eDP not found; ignoring
X Error of failed request: BadRROutput (invalid Output parameter)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 15 (RRGetOutputProperty)
Serial number of failed request: 44
Current serial number in output stream: 44
dasgeek:
This is the message when I try to set it manually:
DISPLAY=:0 xrandr --output eDP --set "vrr_capable" 1
warning: output eDP not found; ignoring
X Error of failed request: BadRROutput (invalid Output parameter)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 15 (RRGetOutputProperty)
Serial number of failed request: 44
Current serial number in output stream: 44
Hi
My system is a laptop (dual amd gpu’s), you need to set the display port as per the link In your case DisplayPort-0
DISPLAY=:0 xrandr --output DisplayPort-0 --set "vrr_capable" 1
malcolmlewis:
Hi
My system is a laptop (dual amd gpu’s), you need to set the display port as per the link In your case DisplayPort-0
DISPLAY=:0 xrandr --output DisplayPort-0 --set "vrr_capable" 1
Ugh, ya that was silly of me. I ran the code again, this time no error so I thought we were onto something. However, after typing that command and then checking
xrandr -prop
it still shows vrr_capable: 0
I’ve also tried a different display port cable and completely power cycling. I did notice in your link it said it does not support multi-monitor so I disconnect my second monitor and tried these steps again (including full power cycle) and still the same issue. I booted into Arch to make sure this wasn’t a distro specific issue as well and the same problem is there. At this point I have to believe it’s just a hardware compatibility issue with either the GPU or the monitor.
Thank you so much for spending all day trying to help me with this. I really wanted to do a video review on FreeSync in Linux but looks like I might need to wait for AMD or MSI to work some kinks out.
dasgeek:
Ugh, ya that was silly of me. I ran the code again, this time no error so I thought we were onto something. However, after typing that command and then checking
xrandr -prop
it still shows vrr_capable: 0
I’ve also tried a different display port cable and completely power cycling. I did notice in your link it said it does not support multi-monitor so I disconnect my second monitor and tried these steps again (including full power cycle) and still the same issue. I booted into Arch to make sure this wasn’t a distro specific issue as well and the same problem is there. At this point I have to believe it’s just a hardware compatibility issue with either the GPU or the monitor.
Thank you so much for spending all day trying to help me with this. I really wanted to do a video review on FreeSync in Linux but looks like I might need to wait for AMD or MSI to work some kinks out.
Hi
No worries, glad to help Maybe a query on the AMD forum may glean more info?
try ¨amdgpu.freesync_video=1¨ kernel parameter and check with Releases · Nixola/VRRTest · GitHub
Really a 4 year old thread???